【发布时间】:2011-10-01 21:58:22
【问题描述】:
这是我在Nhibernate 3 Beginners Guide 中找到的用于覆盖GetHashCode 的代码。我不明白为什么它使用结果 * 397。如果 397 只是他用来生成唯一结果的随机数??
我们可以只用GetHashCode 表示名字、中间名和姓氏,然后用 ^ 将它们组合在一起,它也应该生成一个唯一的结果。
public override int GetHashCode()
{
unchecked
{
var result = FirstName.GetHashCode();
result = (result*397) ^ (MiddleName != null ? MiddleName.GetHashCode() : 0);
result = (result*397) ^ LastName.GetHashCode();
return result;
}
}
【问题讨论】:
-
请注意,哈希码的目的不是为了唯一。哈希码不能是唯一的,因为它们的数量不够。哈希算法中乘法的目的是为了得到良好的分布。
标签: c# nhibernate gethashcode