2009-02-27 4 views
2

私はPersonクラスを持っていて、リスト< Person> pをデータベースから集めています.net 2.0(C#)リスト<T> .Contains(T)が自分のカスタムクラスで動作することを確認するにはどうすればよいですか?

私はPersonクラスを持っています。

私のリストには重複がありますが、私が試してみたらremove the duplicatesは削除されません。

私のPersonクラスはList < T> .Contains(T)が正しく動作するためのインターフェイスを実装する必要がありますか?

他のアイデアはありますか?

ありがとうございます。

答えて

0

docs「このメソッドは、既定の等価比較子EqualityComparer(T).Defaultを使用して同等性を判断します。

+0

が、その後、.Equals 'にフォールバック実装する必要があります()'と '.GetHashCode()'。 –

1

参照する例は、リストからデュープを削除する方法ではありません。リストを取得し、重複を除外するイテレータを生成する関数です。 1つのリスト全体を削除する必要がある場合は、関数から返されたIEnumerable<T>を取り出して新しいList<T>に渡す必要があります。

+0

thanx詳細については、私は参照としてそのコードを使用して元の新しいリストを記入することによって、元の繰り返しから新しいリストの.Contains()をチェックします。 –

1

クラス内でObject.Equals(Object obj)をオーバーロードする必要があります。

4

は、GetHashCodeと等しいです。

+1

これは動作しますが、これはタイプセーフであるため、そうではありません。 – BFree

+0

@BFree:良い点 –

+0

同意します。しかし、私はあなたのGetHashCodeメソッドをオーバーライドする必要があると思います。これにより、より良いパフォーマンスが得られます。 – redjackwong

関連する問題