是long.GetHashCode可靠的交叉环境

Seb*_*son 2 .net gethashcode

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

该问题基于在不同服务器上提到不同结果的其他问题.

// Will I be the same everywhere?
var hash = 2170881568869167279.GetHashCode();
Run Code Online (Sandbox Code Playgroud)

奖励:是否同去intuint

Dan*_*rth 5

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

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

对于某些类型,它可能 - 并且可能是 - 以始终返回相同哈希码的方式实现,即使在不同的机器上也是如此.但是,这是你应该实现的细节依赖-这可能更改,恕不另行通知.

此外,两个不同的对象可以合法地具有相同的哈希码.在你的榜样long,您平均将有每个哈希码long.MaxValue / int.MaxValue时候,你创建的所有值的哈希码long.MinValuelong.Maxvalue.

结论:
不,它不是识别对象实例的可靠方法.

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