Ответ 1
Попробуйте использовать метод расширения SequenceEqual
. Например:
byte[] a1 = new byte[] { 1, 2, 3 };
byte[] a2 = new byte[] { 1, 2, 3 };
bool areEqual = a1.SequenceEqual(a2); // true
У меня есть два байтовых массива с одним и тем же содержимым. Я пробовал:
if (bytearray1 == bytearray2) {...} else {...}
и
if (Array.Equals(bytearray1, bytearray2)) {....} else {...}
Все время идет к другому! Я не знаю почему! Я проверил оба массива вручную несколько раз!!!
Попробуйте использовать метод расширения SequenceEqual
. Например:
byte[] a1 = new byte[] { 1, 2, 3 };
byte[] a2 = new byte[] { 1, 2, 3 };
bool areEqual = a1.SequenceEqual(a2); // true
Оператор ==
сравнивает по ссылке; это два разных случая.
Array.Equals
действительно Object.Equals
, который вызывает метод экземпляров Equals
.
Поскольку массивы не переопределяют Equals()
, это тоже сравнивается по ссылке.
Вместо этого вы должны вызвать метод LINQ SequenceEqual()
.
И оператор ==
, и метод Equals проведут тестовое равенство. Поскольку у вас есть два отдельных массива, они никогда не будут равными.
Так как вы хотите проверить, что оба массива имеют один и тот же контент в том же порядке, попробуйте вместо этого использовать SequenceEqual
.
В качестве альтернативы, если вам неудобно использовать LINQ, вы можете использовать класс System.Convert...
byte[] a1;
byte[] a2;
if (System.Convert.ToBase64String(a1) == System.Convert.ToBase64String(a2)) {
doSomething();
}
else {
doSomethingElse();
}