2012-09-09 22 views
25

के दो सरणियों की तुलना करने के लिए मैं ठीक उसी सामग्री के साथ दो बाइट सरणियों की है। मैंने कोशिश की:बाइट्स

if (bytearray1 == bytearray2) {...} else {...} 

और

if (Array.Equals(bytearray1, bytearray2)) {....} else {...} 

सभी समय इसे किसी और को जाता है! मुझे नहीं पता क्यों! मैंने दोनों सरणी मैन्युअल रूप से कई बार जांच की !!!

+1

देखें संबंधित: http://stackoverflow.com/questions/43289/comparing-two -byte-arrays-in-net – Anthony

उत्तर

65

SequenceEqual विस्तार विधि का उपयोग कर प्रयास करें।

byte[] a1 = new byte[] { 1, 2, 3 }; 
byte[] a2 = new byte[] { 1, 2, 3 }; 
bool areEqual = a1.SequenceEqual(a2); // true 
8

दोनों == ऑपरेटर और बराबर विधि संदर्भ समानता का परीक्षण होगा: उदाहरण के लिए। चूंकि आपके पास दो अलग-अलग सरणी हैं, इसलिए वे कभी बराबर नहीं होंगे।

आप परीक्षण करने के लिए है कि दोनों सरणियों उसी क्रम में एक ही सामग्री है चाहता हूँ के बाद से, बजाय SequenceEqual विधि का उपयोग कर प्रयास करें।

12

== ऑपरेटर संदर्भ द्वारा तुलना; वे दो अलग-अलग उदाहरण हैं।

Array.Equals वास्तव में Object.Equals, जो उदाहरणों Equals प्रणाली को बुलाती है।
के बाद से सरणियों Equals() ओवरराइड नहीं करते, यह भी संदर्भ से तुलना करती है।

इसके बजाय, आप LINQ SequenceEqual() विधि फोन करना चाहिए।

-4

एक विकल्प के रूप में, यदि आप आरामदायक LINQ का उपयोग कर आप System.Convert वर्ग का उपयोग नहीं कर सकते हैं ...

byte[] a1; 
byte[] a2; 

if (System.Convert.ToBase64String(a1) == System.Convert.ToBase64String(a2)) { 
    doSomething(); 
} 
else { 
    doSomethingElse(); 
} 
+6

मैं दो सरणी को स्ट्रिंग करने के लिए "confortable" नहीं होगा और फिर तुलना करने के लिए स्ट्रिंग पर फिर से घुमाएगा। मैं LINQ विधि का उपयोग करके या अपनी खुद की विधि का उपयोग कर एक बार फिर से शुरू करना पसंद करूंगा। –

+1

बहुत और अनिवार्य रूप से अक्षम। डेवी फियामेनगी ने कहा, या तो सीक्वेंस एक्वाल का उपयोग करें या बस सरल लूप तुलना करें। – chris

+0

यह इस बात पर निर्भर करेगा कि तुलना के एक तरफ बेस 64 में पहले से ही है, इस मामले में आप दूसरी तरफ भी परिवर्तित कर सकते हैं। जब आप मानव पठनीय बाइट [] सरणी प्रस्तुत करना चाहते हैं तो यह परिदृश्य काफी आम है। उदाहरण के लिए, दस्तावेज़ सत्यापन के लिए हैश का उपयोग करते समय –

संबंधित मुद्दे