我有两个完全相同的字节数组。我尝试过:
if (bytearray1 == bytearray2) {...} else {...}
和
if (Array.Equals(bytearray1, bytearray2)) {....} else {...}
始终都走到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();
}