是long.GetHashCode可靠的交叉环境

时间:2013-01-11 11:46:27

标签: .net gethashcode

long.GetHashCode()中出现的值是否会在不同的.NET Framework版本,操作系统版本,处理器架构等中可靠地相同?

问题基于other questions that mentions different results on different servers

// Will I be the same everywhere?
var hash = 2170881568869167279.GetHashCode();

奖金intuint也一样吗?

1 个答案:

答案 0 :(得分:5)

根据GetHashCode的合同,在两个不同的流程中,它甚至不需要在同一台机器上相同:

  

此方法的默认实现不得用作散列目的的唯一对象标识符。

对于某些类型,它可能 - 并且可能是 - 以始终返回相同哈希码的方式实现,即使在不同的机器上也是如此。但这是一个你应该依赖的实现细节 - 它可能会在没有通知的情况下发生变化。

此外,两个不同的对象可以合法地具有相同的哈希码。在使用long的示例中,当您为long.MaxValue / int.MaxValuelong.MinValue的所有值创建哈希码时,平均每个哈希码都会long.Maxvalue次。

<强>结论:
不,它不是识别对象实例的可靠方法。

处理数字时,您可以简单地使用数字本身或使用真正的哈希算法。