long.GetHashCode()
中出现的值是否会在不同的.NET Framework版本,操作系统版本,处理器架构等中可靠地相同?
问题基于other questions that mentions different results on different servers。
// Will I be the same everywhere?
var hash = 2170881568869167279.GetHashCode();
奖金:int
和uint
也一样吗?
答案 0 :(得分:5)
根据GetHashCode
的合同,在两个不同的流程中,它甚至不需要在同一台机器上相同:
此方法的默认实现不得用作散列目的的唯一对象标识符。
对于某些类型,它可能 - 并且可能是 - 以始终返回相同哈希码的方式实现,即使在不同的机器上也是如此。但这是一个你应该不依赖的实现细节 - 它可能会在没有通知的情况下发生变化。
此外,两个不同的对象可以合法地具有相同的哈希码。在使用long
的示例中,当您为long.MaxValue / int.MaxValue
到long.MinValue
的所有值创建哈希码时,平均每个哈希码都会long.Maxvalue
次。
<强>结论:强>
不,它不是识别对象实例的可靠方法。
处理数字时,您可以简单地使用数字本身或使用真正的哈希算法。