我有以下代码用于生成一个对象的哈希值:
public int GetHashCode(MyType obj)
{
return (obj.Prop1.GetHashCode() + obj.Prop2.GetHashCode() + obj.Prop3.GetHashCode()).GetHashCode();
}
即,我将所有属性的哈希码相加,然后对此哈希。在审查中,一位同事认为这样会发生碰撞太频繁。但我不确定这是否正确,因为:
1. 哈希码在正数和负数之间以相等的频率选择,并且它们会循环,所以我认为我们没有获得任何有关这些数字总和可能性的额外信息,而是只能获得数字本身。
2. 在哈希码设计中,为了使“接近”的数字变得“远离”,哈希码被设计成生成非随机分布值时也不应该出现问题。
谁是正确的?
如果答案具有语言特定性,则是C#。