Looking for c# Answers? Try Ask4KnowledgeBase
Looking for c# Keywords? Try Ask4Keywords

C# Language等しいとGetHashCode


備考

Equals各実装では、次の要件を満たす必要があります。

  • 再帰的 :オブジェクトはそれ自身と同じでなければならない。
    x.Equals(x)true返しtrue

  • 対称 :xとy、またはyとxをxと比較すると、違いはありません。結果は同じです。
    x.Equals(y)y.Equals(x)と同じ値を返します。

  • 推移 :1つのオブジェクトが別のオブジェクトと等しく、このオブジェクトが3番目のオブジェクトに等しい場合、最初のオブジェクトは3番目のオブジェクトに等しくなければなりません。
    if (x.Equals(y) && y.Equals(z))true返したtruex.Equals(z)true返しtrue

  • 一貫性 :オブジェクトを別のものと何度も比較すると、結果は常に同じになります。
    連続するx.Equals(y)呼び出しは、xとyによって参照されるオブジェクトが変更されていない限り、同じ値を返します。

  • nullとの比較 :オブジェクトはnullはなりません。
    x.Equals(null)false返しfalse

GetHashCode実装:

  • Equals互換性があります:2つのオブジェクトが等しい場合( Equalsがtrueを返す場合)、 GetHashCode それぞれのオブジェクトに対して同じ値を返す必要があります。

  • 広い範囲 :2つのオブジェクトが等しくない場合( Equals偽言う)、それらのハッシュコードが明瞭である高い確率が存在すべきです。選択可能な値の数が限られているため、 完璧なハッシングは不可能です。

  • Cheap :すべてのケースでハッシュコードを計算するのは安価でなければなりません。

参照: オーバーロードのためのガイドラインEquals()とオペレータ==

等しいとGetHashCode 関連する例