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
返したtrue
、 x.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 :すべてのケースでハッシュコードを計算するのは安価でなければなりません。