HashSet<T>.Addまず、の結果を比較しますGetHashCode。それらが等しい場合は、を呼び出しますEquals。
さて、私の理解は、実装するために、オブジェクトのフィールドで何かをしなければならないということGetHashCodeです。簡単な実装例は、オーバーライドされたSystem.Object.GetHashCodeに最適なアルゴリズムは何ですか?にあります。。
ランダムデータで満たされた1.000.000ペアのオブジェクトの両方を比較する私のテストでは、パフォーマンスは2つの間でほぼ同等です。GetHashCodeリンクされた例のように実装され、すべてのフィールドEqualsを呼び出すだけです。Equalsでは、なぜ使いすぎGetHashCodeたのEqualsでしょうか。