同じすべてのメンバーとのHashsetsと、クラスの異なるインスタンス
-
19-09-2019 - |
質問
のは、私はMyClassのというクラスがあるとしましょう。
私のコードでは、私はMyClassの、myclass1とmyclass2の2つのインスタンスを持っています。 それらについてのすべてが(パブリックとプライベート)の特性が同一である。
私はHashSetのにそれらの両方を追加しようとすると、これは、両方か一つだけを追加しますか? それは両方を追加し、私はそれをしたくない場合は、私はoveriddeできるが、MyClassの定義に等しく、HasSetがそれを使用する方法を知っているのだろうか?
解決
短い答え、それはあなたのオブジェクトのEqualsメソッドによって異なります。
長い答えます:
HashSetのは、2つのオブジェクトが等しいかどうかを決定するためにされたIEqualityComparerを使用します。あなたがものを提供しない場合には、EqualityComparer.Default
を使用します。これは効果的にだけではObject.equals(a、b)はプラスボクシングの値の種類を回避するために、いくつかのものを使用します。
object.Equals(a, b)
のためのドキュメントをチェック:それは効果的にちょうどヌルのチェック後にa.Equals(b)
を行っている。
object.Equals(other)
のデフォルトの実装では、参照のみの等価性をチェックすることです(つまり、彼らはオブジェクトの正確な同じインスタンスです)しかし、あなたは、このようなIDフィールドが同一であるかどうかをチェックするように、あなたが好きなチェックを実行するには、これを無効にすることができます。オーバーライドは、あなたもGetHashCodeメソッドをオーバーライドする必要があり等しいとき、注意します。
あなたはそれをカスタムの代わりにされたIEqualityComparerを提供することができます。