long.GetHashCode()
在不同的 .NET Framework 版本、操作系统版本、处理器架构等之间,产生的值是否可靠地相同?
该问题基于其他问题,这些问题提到了不同服务器上的不同结果。
// Will I be the same everywhere?
var hash = 2170881568869167279.GetHashCode();
奖励:int
和 也一样uint
吗?
long.GetHashCode()
在不同的 .NET Framework 版本、操作系统版本、处理器架构等之间,产生的值是否可靠地相同?
该问题基于其他问题,这些问题提到了不同服务器上的不同结果。
// Will I be the same everywhere?
var hash = 2170881568869167279.GetHashCode();
奖励:int
和 也一样uint
吗?
根据 的合同GetHashCode
,甚至不需要在同一台机器上的两个不同进程中相同:
此方法的默认实现不得用作散列目的的唯一对象标识符。
对于某些类型,它可能 - 并且可能 - 以始终返回相同哈希码的方式实现,即使在不同的机器上也是如此。但这是一个你不应该依赖的实现细节——它可能会在没有通知的情况下改变。
此外,两个不同的对象可以合法地具有相同的哈希码。在您的示例中long
,平均而言,当您为从tolong.MaxValue / int.MaxValue
的所有值创建哈希码时,您将拥有每个哈希码时间。long.MinValue
long.Maxvalue
结论:
不,这不是识别对象实例的可靠方法。
在处理数字时,您可以简单地使用数字本身或使用真正的散列算法。