ハッシュ値

Equals() を override したんだけど GetHashCode() をどんな内容で override したらいいかわからない...って大丈夫ですか!? ということがたまに。

(1)〜(100)までのボールが1つのバケツに入っているとして、そこから(73)のボールを取り出すにはどうすればいいか? 当然バケツの中からボールを捜すしかなく、1個目が偶然(73)だったらよいのだが、80個調べても(73)が見つからないかもしれない。
たとえば、バケツが「偶数バケツ」と「奇数バケツ」の2つあったとしたら、(73)を探すためには「奇数バケツ」だけをチェックすればいい。
もし、バケツが「(1)〜(10)バケツ」「(11)〜(20)バケツ」…「(81)〜(90)バケツ」「(91)〜(100)バケツ」の10個のバケツがあったとすれば、「(71)〜(80)バケツ」だけを調べれば、すぐに目的の(73)のボールが発見できるだろう。
では、もっとバケツの数を増やしてバケツが50個あったら……50もあるバケツから(73)の入っているバケツを探すのが大変になる……かもしれないですね。

このような処理でバケツを決定するのに使用されるのがハッシュ値であり、GetHashCode() です。
GetHashCode() の実装が正しくないと、(73)を「偶数バケツ」から探してしまい、「(73)なんてボールはない」という結果がかえる場合があります。