qin*_*126 2 c# nhibernate gethashcode
这是我在Nhibernate 3 Beginners Guide覆盖中找到的代码GetHashCode.我不明白为什么它使用结果*397.如果397只是一个随机数他用来产生独特的结果?
我们可以只GetHashCode使用firstname,middlename和lastname,然后使用^将它们组合在一起,它还应该生成一个唯一的结果.
public override int GetHashCode()
{
unchecked
{
var result = FirstName.GetHashCode();
result = (result*397) ^ (MiddleName != null ? MiddleName.GetHashCode() : 0);
result = (result*397) ^ LastName.GetHashCode();
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
将中间散列码乘以给定数字作为每个组合的一部分将意味着组合的代码的排序将不是无关紧要的.
如果你只是做了一个独家或三个名字部分,那么"John William James"会给出与"James William John"相同的哈希码.
397 之所以选择它是因为它是一个足够大的素数,足以导致哈希码溢出,这有助于生成哈希码的良好分布.
溢出是此代码必须位于unchecked块内的原因.
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |