まったく同じ内容の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()
をオーバーライドしないため、これも参照によって比較されます。
代わりに、LINQ SequenceEqual()
メソッドを呼び出す必要があります。
両方の==
演算子とEqualsメソッドは、参照の等価性をテストします。 2つの別個の配列があるため、それらが等しくなることはありません。
両方の配列が同じ順序で同じコンテンツを持っていることをテストしたいので、代わりに SequenceEqual
メソッドを使用してみてください。