の実装Nullable<T>.GetHashCode()
は次のとおりです。
public override int GetHashCode()
{
if (!this.HasValue)
{
return 0;
}
return this.value.GetHashCode();
}
ただし、基になる値が0のハッシュコードも生成する場合(たとえば、boolをfalseに設定するか、int32を0に設定する)、同じハッシュコードで2つの一般的に発生する異なるオブジェクト状態があります。より良い実装は次のようなものだったと私には思えます。
public override int GetHashCode()
{
if (!this.HasValue)
{
return 0xD523648A; // E.g. some arbitrary 32 bit int with a good mix of set and
// unset bits (also probably a prime number).
}
return this.value.GetHashCode();
}