質問

のは、私は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メソッドをオーバーライドする必要があり等しいとき、注意します。

あなたはHashSetのは、オブジェクトの定義を変更することなく、平等を決定する方法を変更したい場合は、

あなたはそれをカスタムの代わりにされたIEqualityComparerを提供することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top