2012-09-09 16 views
25

Ho due array di byte con lo stesso identico contenuto. Ho provato:Come confrontare due array di byte

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

e

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

Tutto il tempo va alla altro! Non so perché! Ho controllato entrambe le matrici manualmente più volte !!!

+1

See correlati: http://stackoverflow.com/questions/43289/comparing-two -byte-array-in-net – Anthony

risposta

65

Provare a utilizzare il metodo di estensione SequenceEqual. Ad esempio:

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

Sia l'operatore == e il metodo Equals verificherà la parità riferimento. Dato che hai due array separati, non saranno mai uguali.

Poiché si desidera verificare che entrambi gli array abbiano lo stesso contenuto nello stesso ordine, provare a utilizzare il metodo SequenceEqual.

12

L'operatore == confronta per riferimento; quelli sono due casi diversi.

Array.Equals è in realtà Object.Equals, che chiama il metodo istanze Equals.
Poiché gli array non sostituiscono Equals(), anche questo viene confrontato per riferimento.

Invece, è necessario chiamare il metodo LINQ SequenceEqual().

-4

In alternativa, se non si ha familiarità con LINQ è possibile utilizzare la classe System.Convert ...

byte[] a1; 
byte[] a2; 

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

Sarei "non confortable" convertire due array in string e quindi ripetere l'iterazione sulla stringa nuovamente per fare un confronto. Preferirei iterare solo una volta usando il metodo LINQ o facendo il mio metodo. –

+1

Terribilmente e inutilmente inefficiente. Come ha detto Davi Fiamenghi, o usare SequenceEqual o semplicemente fare un semplice confronto di loop. – chris

+0

Dipende dal fatto che un lato del confronto sia già in base64, nel qual caso si può anche convertire l'altro lato. Questo scenario è ragionevolmente comune quando si desidera presentare array di byte [] leggibili. Ad esempio, quando si utilizzano gli hash per la verifica del documento –

Problemi correlati