3

私はというクラスを持っています

MyClass

このクラスはIEquatableを継承し、必要な方法で同等の実装を行います。(意味:コード内で2つのMyClass tyupeオブジェクトを個別に比較すると、機能します)

次に、2つのリストを作成します。

var ListA = new List<MyClass>();
var ListB = new List<MyClass>();
// Add distinct objects that are equal to one another to 
// ListA and ListB in such a way that they are not added in the same order.

ListAとListBを比較するとき、私は真実になるべきですか?

ListA.Equals(ListB)==true; //???
4

3 に答える 3

7

次を試してください

ListA.SequenceEquals(ListB);

SequenceEqualsは、Enumerableクラスで使用可能な拡張メソッドです。これは、System.Linqに付属しているため、C#3.5プロジェクトでデフォルトで使用できます。

于 2010-03-11T20:21:48.927 に答える
2

Enumerable.SequenceEqual

于 2010-03-11T20:22:23.510 に答える
0

あなたの質問に答えるために、いいえ、あなたは真実になるべきではありません。List.Equalsを定義しList<T>ないため、Object.Equalsを継承し、以下をチェックします。

public static bool Equals(object objA, object objB)
{
    return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}

そしてobjA.Equals(objB)仮想です。正しく思い出せば、デフォルトの実装は参照の同等性(メモリ内の同じオブジェクトを指している)をチェックするだけなので、コードはfalseを返します。

于 2010-03-11T20:59:20.190 に答える