2009-08-21 29 views
0

myclassというクラスがあるとします。ハッシュセットとすべてのメンバーが同じクラスの異なるインスタンス

私のコードでは、myclass、myclass1およびmyclass2の2つのインスタンスがあります。 それらに関するすべてが(パブリックとプライベートの)プロパティが同一です。

両方をHashSetに追加しようとすると、両方または1つだけ追加されますか? 両方を追加しても欲しくない場合は、myclass定義でequalsをオーバーライドできますか?HasSetはその使用方法を知っていますか?

答えて

2

簡単な答えは、オブジェクトのEqualsメソッドに依存します。

長い答え:

HashSetのは、2つのオブジェクトが等しいかどうかを判断するためにされたIEqualityComparerを使用します。 1つを指定しないと、EqualityComparer.Defaultが使用されます。事実上単にobject.Equals(a、b)とボクシング値の型を避けるためのいくつかのものを使用しています。

object.Equals(a, b)のドキュメントを確認する:ヌルを確認した後、実際にa.Equals(b)を実行しているだけです。

object.Equals(other)のデフォルトの実装では、参照の等価性のみをチェックします(つまり、オブジェクトのインスタンスはまったく同じです)が、これをオーバーライドして、IDフィールドが同一かどうかを確認するなど、 。ただし、Equalsをオーバーライドする場合は、GetHashCodeもオーバーライドする必要があります。

HashSetがオブジェクトの定義を変更せずに同等性をどのように判断するかを変更する場合は、代わりにカスタムIEqualityComparerを指定できます。

関連する問題