的实现Nullable<T>.GetHashCode()
如下:
public override int GetHashCode()
{
if (!this.HasValue)
{
return 0;
}
return this.value.GetHashCode();
}
然而,如果基础值也生成 0 的哈希码(例如,设置为 false 的 bool 或设置为 0 的 int32),那么我们有两个常见的具有相同哈希码的不同对象状态。在我看来,更好的实现应该是这样的。
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();
}