簡単な答えは、オブジェクトの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を指定できます。