25

我有两个内容完全相同的字节数组。我试过:

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

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

一直到其他地方!我不知道为什么!我手动检查了这两个数组好几次!!!

4

4 回答 4

71

尝试使用SequenceEqual扩展方法。例如:

byte[] a1 = new byte[] { 1, 2, 3 };
byte[] a2 = new byte[] { 1, 2, 3 };
bool areEqual = a1.SequenceEqual(a2); // true
于 2012-09-09T20:31:43.357 回答
12

==运算符按引用进行比较;这是两个不同的例子。

Array.Equals是真的Object.Equals,它调用实例Equals方法。
由于数组不覆盖Equals(),这也通过引用进行比较。

相反,您应该调用 LINQSequenceEqual()方法。

于 2012-09-09T20:32:15.260 回答
8

运算符和 Equals 方法都==将测试引用相等性。由于您有两个单独的数组,它们永远不会相等。

由于您要测试两个数组是否以相同的顺序具有相同的内容,请尝试改用该SequenceEqual方法。

于 2012-09-09T20:31:57.347 回答
-5

作为替代方案,如果您不习惯使用LINQ,您可以使用 System.Convert 类...

byte[] a1;
byte[] a2;

if (System.Convert.ToBase64String(a1) == System.Convert.ToBase64String(a2)) {
    doSomething();
}
else {
    doSomethingElse();
}
于 2012-09-10T01:07:34.593 回答