2012-09-09 27 views
25

Tengo dos matrices de bytes con exactamente el mismo contenido. Probé:Cómo comparar dos matrices de bytes

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

y

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

Todo el tiempo que va a la otra! ¡No sé por qué! ¡Comprobé ambas matrices de forma manual varias veces!

+1

Relacionados: http://stackoverflow.com/questions/43289/comparing-two -byte-arrays-in-net – Anthony

Respuesta

65

Pruebe usar el método de extensión SequenceEqual. Por ejemplo:

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

Tanto el operador == y el método Equals pondrá a prueba la igualdad de referencia. Como tiene dos matrices separadas, nunca serán iguales.

Dado que desea probar que ambas matrices tienen el mismo contenido en el mismo orden, intente utilizar el método SequenceEqual en su lugar.

12

El operador == lo compara por referencia; esos son dos casos diferentes.

Array.Equals es realmente Object.Equals, que llama al método instancias Equals.
Como las matrices no anulan Equals(), esto también se puede comparar por referencia.

En su lugar, debe llamar al método LINQ SequenceEqual().

-4

Como alternativa, si no se siente cómodo usando LINQ puede utilizar la clase System.Convert ...

byte[] a1; 
byte[] a2; 

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

Sería "no cómodo" convertir dos matrices en una cadena y luego repetir la cadena nuevamente para hacer una comparación. Preferiría iterar solo una vez usando el método LINQ o haciendo mi propio método. –

+1

Terriblemente y innecesariamente ineficiente. Como dijo Davi Fiamenghi, usa SequenceEqual o simplemente haz una comparación de bucle simple. – chris

+0

Dependerá de si un lado de la comparación ya está en base64, en cuyo caso también puede convertir el otro lado. Este escenario es razonablemente común cuando desea presentar matrices de bytes legibles por humanos. Por ejemplo, al usar hashes para la verificación de documentos –

Cuestiones relacionadas