Подтвердить что ты не робот

Как сравнить два массива байтов

У меня есть два байтовых массива с одним и тем же содержимым. Я пробовал:

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

и

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

Все время идет к другому! Я не знаю почему! Я проверил оба массива вручную несколько раз!!!

4b9b3361

Ответ 1

Попробуйте использовать метод расширения SequenceEqual. Например:

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

Ответ 2

Оператор == сравнивает по ссылке; это два разных случая.

Array.Equals действительно Object.Equals, который вызывает метод экземпляров Equals.
Поскольку массивы не переопределяют Equals(), это тоже сравнивается по ссылке.

Вместо этого вы должны вызвать метод LINQ SequenceEqual().

Ответ 3

И оператор ==, и метод Equals проведут тестовое равенство. Поскольку у вас есть два отдельных массива, они никогда не будут равными.

Так как вы хотите проверить, что оба массива имеют один и тот же контент в том же порядке, попробуйте вместо этого использовать SequenceEqual.

Ответ 4

В качестве альтернативы, если вам неудобно использовать LINQ, вы можете использовать класс System.Convert...

byte[] a1;
byte[] a2;

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