从版本 15.6.7 开始,Visual Studio 2017 用于以下类:
class Contact
{
public int Id { get; set; }
public string Name { get; set; }
}
生成此GetHashCode
方法(数量不同):
public override int GetHashCode()
{
var hashCode = 1460282102;
hashCode = hashCode * -1521134295 + Id.GetHashCode();
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Name);
return hashCode;
}
为什么使用EqualityComparer<>
而不只是通过调用String.GetHashCode()
实例方法来检索字符串哈希?仅仅是因为默认比较器执行了空值检查吗?
在我看来,使用相等比较器是一种开销。