我最近发现Visual Studio 2017可以自动生成Equals
和GetHashCode
的覆盖,但是我想知道为什么GetHashCode
实现没有在unchecked块中?
我创建了一个简单的类,有两个公共字符串属性Foo和Bar,生成的GetHashCode
实现如下所示。
public override int GetHashCode()
{
var hashCode = -504981047;
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Foo);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Bar);
return hashCode;
}
我认为未经检查的GetHashCode
实现很重要,因为它很可能会溢出,而我们不希望出现任何溢出异常,因为如果它绕过来了也没关系。