web-dev-qa-db-ja.com

2つのバイト配列を比較する方法

まったく同じ内容の2つのバイト配列があります。私は試した:

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

そして

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

それはいつでも他に行きます!理由がわかりません!両方のアレイを手動で数回チェックしました!!!

25
Michael

SequenceEqual 拡張メソッドを使用してみてください。例えば:

byte[] a1 = new byte[] { 1, 2, 3 };
byte[] a2 = new byte[] { 1, 2, 3 };
bool areEqual = a1.SequenceEqual(a2); // true
67
Darin Dimitrov

_==_演算子は参照で比較します。これらは2つの異なるインスタンスです。

_Array.Equals_は実際には_Object.Equals_であり、インスタンスEqualsメソッドを呼び出します。
配列はEquals()をオーバーライドしないため、これも参照によって比較されます。

代わりに、LINQ SequenceEqual()メソッドを呼び出す必要があります。

12
SLaks

両方の==演算子とEqualsメソッドは、参照の等価性をテストします。 2つの別個の配列があるため、それらが等しくなることはありません。

両方の配列が同じ順序で同じコンテンツを持っていることをテストしたいので、代わりに SequenceEqual メソッドを使用してみてください。

8
Justin Niessner