25

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

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

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

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

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

于 2012-09-09T20:32:15.260 に答える
8

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

両方の配列が同じコンテンツを同じ順序で持っていることをテストしたいので、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 に答える