web-dev-qa-db-fra.com

Comment comparer deux tableaux d'octets

J'ai deux tableaux d'octets avec exactement le même contenu. J'ai essayé:

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

et

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

Tout le temps ça va à l'autre! Je ne sais pas pourquoi! J'ai vérifié les deux tableaux manuellement plusieurs fois !!!

25
Michael

Essayez d'utiliser la méthode d'extension SequenceEqual . Par exemple:

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

L'opérateur == Compare par référence; ce sont deux cas différents.

Array.Equals Est vraiment Object.Equals, Qui appelle la méthode instances Equals.
Étant donné que les tableaux ne remplacent pas Equals(), cela se compare également par référence.

Au lieu de cela, vous devez appeler la méthode LINQ SequenceEqual().

12
SLaks

L'opérateur == Et la méthode Equals testeront l'égalité de référence. Puisque vous avez deux tableaux séparés, ils ne seront jamais égaux.

Puisque vous souhaitez tester que les deux tableaux ont le même contenu dans le même ordre, essayez plutôt d'utiliser la méthode SequenceEqual .

8
Justin Niessner