まったく同じ内容の 2 つのバイト配列があります。私は試した:
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
演算子は==
参照によって比較します。これらは 2 つの異なるインスタンスです。
Array.Equals
インスタンスメソッドObject.Equals
を呼び出します。
配列は をオーバーライドしないため、これも参照によって比較されます。Equals
Equals()
代わりに、LINQSequenceEqual()
メソッドを呼び出す必要があります。
==
演算子と Equals メソッドの両方が、参照の等価性をテストします。2 つの別個の配列があるため、それらが等しくなることはありません。
両方の配列が同じコンテンツを同じ順序で持っていることをテストしたいので、SequenceEqual
代わりにメソッドを使用してみてください。
別の方法として、 LINQの使用に慣れていない場合は、System.Convert クラスを使用できます...
byte[] a1;
byte[] a2;
if (System.Convert.ToBase64String(a1) == System.Convert.ToBase64String(a2)) {
doSomething();
}
else {
doSomethingElse();
}