和许多人一样,我使用ReSharper来加速开发过程。当你用它来覆盖类的相等成员时,它为GetHashCode()
生成的代码看起来像这样:
public override int GetHashCode()
{
unchecked
{
int result = (Key != null ? Key.GetHashCode() : 0);
result = (result * 397) ^ (EditableProperty != null ? EditableProperty.GetHashCode() : 0);
result = (result * 397) ^ ObjectId;
return result;
}
}
当然,我有一些自己的成员在里面,但我想知道的是为什么是397?编辑:那么我的问题更好的表述应该是,除了它是一个质数之外,397这个质数有没有什么“特别”的地方?
*397
定义了哈希表的大小,这就是FNV哈希算法所做的(但它建议在64位哈希中使用1099511628211,这不适用于32位整数)。 - John Zabroski