3

MSDNから

SequenceEqual(IEnumerable, IEnumerable) メソッドは、2 つのソース シーケンスを並行して列挙し、TSource の既定の等値比較子 Default を使用して、対応する要素を比較します。デフォルトの等値比較子である Default は、IEqualityComparer ジェネリック インターフェイスを実装する型の値を比較するために使用されます。

a) 上記の引用を理解しているように、が EqualityComparer<T>.Defaultを実装する型の要素を比較するために使用されることを暗示しています。IEqualityComparer<T>DefaultIEqualityComparer<T>IEquatable<T>.EqualsTIEquatable<T>Object.Equals

TSourceb)引用は、実装する必要があることも示唆してIEqualityComparer<T>いますが、これは真実ではありません:

   static void Main(string[] args)
   {
        Test test1 = new Test();
        Test test2 = new Test();

        Test[] list1 = { test1, test2 };
        Test[] list2 = { test1, test2 };

        bool eq = list1.SequenceEqual(list2); //works
   }     

  public class Test { }

それで、引用が伝えようとしていることを誤解したのでしょうか、それとも引用が間違っているのでしょうか?

ありがとうございました

4

2 に答える 2

2

TSource実装すべきではないIEqualityComparer

しかし、EqualityComparer<T>.Default実装しますIEqualityComparer

デフォルトの等値比較子Default は、IEqualityComparer ジェネリック インターフェイスを実装する型の値を比較するために使用されます。

それは言及するにはあまりにも無意識です。

于 2011-04-20T10:52:55.233 に答える
2

MSDNから:

Default プロパティは、型 T が System.IEquatable インターフェイスを実装しているかどうかを確認し、実装している場合は、その実装を使用する EqualityComparer を返します。 それ以外の場合は、T によって提供される Object.Equals および Object.GetHashCode のオーバーライドを使用する EqualityComparer を返します。

あなたの例では、参照オブジェクトのデフォルトの等価実装である参照等価を使用するだけです。

于 2011-04-19T19:01:35.817 に答える