我有以下代码来生成对象的哈希:
public int GetHashCode(MyType obj)
{
return (obj.Prop1.GetHashCode() + obj.Prop2.GetHashCode() + obj.Prop3.GetHashCode()).GetHashCode();
}
即,我添加了所有属性的哈希码,然后对其进行哈希处理。
在审查中,一位同事建议这将过于频繁地发生冲突。我不确定这是不是真的,因为:
- 鉴于在正数和负数之间以相同的频率选择哈希码并且它们环绕,我认为我们没有获得任何关于这些数字总和的可能性的额外信息,而不是数字本身
- 如果它们的总和是非随机的,哈希码旨在使“靠近”的数字变得“相距甚远”,因此将非均匀分布的值输入函数应该不是问题
谁是正确的?
它在 C# 中,以防答案是特定于语言的。