Equals
特定の理由で、公式の契約に従わない複数のクラスがあります。上書きGetHashCode()
されたこれらのクラスは単純に 0 を返すため、ハッシュマップで使用できます。
これらのクラスのいくつかは同じインターフェースを実装しており、このインターフェースをキーとして使用するハッシュマップがあります。だから私は、すべてのクラスが少なくとも異なる(しかしそれでも一定の)値を返す必要があると考えましたGetHashCode()
.
問題は、この値をどのように選択するかです。最初のクラスが 1 を返し、次のクラスが 2 というように単純に返す必要がありますか? または、次のようなものを試す必要があります
class SomeClass : SomeInterface {
public overwrite int GetHashCode() {
return "SomeClass".GetHashCode();
}
}
ハッシュはより均等に分散されますか?(返された値を自分でキャッシュする必要がありますか、それとも Microsoft のコンパイラでこれを最適化できますか?)
更新: Equals は規約に違反しているため、オブジェクトごとに個別のハッシュコードを返すことはできません。具体的には、この問題について言及しています。