C#
.NETFramework

二つの配列を比較する

C# で二つのオブジェクトを比較する」で配列の比較に SequenceEqual を使いました。
今しがた array.cs を見て知ったのですが、配列は IStructuralEquatable インターフェイス というインターフェースを実装しています。

今度はこれを使って比較してみます。

var a = new[] { 1, 2, 3 };
var b = new[] { 1, 2, 3 };
Console.WriteLine(a == b);
Console.WriteLine(EqualityComparer<int[]>.Default.Equals(a, b));
Console.WriteLine(StructuralComparisons.StructuralEqualityComparer.Equals(a, b));

結果は次のようになります。

False
False
True

StructuralComparisons を使うと同じ要素を持つ配列が等しいものと判定されました。
ついでに List<T> も比較してみます。

var a = new[] { 1, 2, 3 };
var b = new[] { 1, 2, 3 };
Console.WriteLine(StructuralComparisons.StructuralEqualityComparer.Equals(a.ToList(), b.ToList()));
False

ダメでした。
List<T>IStructuralEquatable を実装していないからですね。

せっかくみつけたインターフェースですが、使い道はあまり無いようです。
タプルもこのインターフェースを実装しているので、要素の詳細のわからないタプル同士の比較が必要な時には使えるかもしれません。