我像这样声明了 C# 代码行
int hashcode = "apple".GetHashCode();
在我的计算机、工作计算机和朋友的计算机上,结果是 1657858284。在开发服务器上,结果是 1548091822。有没有办法让我告诉项目始终使 GetHashCode() 产生 1657858284,无论它在哪个服务器上?
更多笔记起初,我注意到版本之间存在差异......1657858284结果来自.NET 3.5和.NET 4.0。 1548091822 来自.NET 2.0。
然后我告诉 Visual Studios 2010 将项目编译为 .net 2.0 项目,但它仍然给了我 1657858284。
正如其他人所指出的,这与文档一致。你must not依赖 GetHashCode 返回相同的东西,永远。你唯一可以依赖的不变量是如果对象没有以任何方式改变其相等语义,它将在同一应用程序域中的同一对象上返回相同的值。如果不满足这些条件中的任何一个 - 如果两个对象位于不同的应用程序域中,或者对象以改变其相等语义的方式发生变异 - 那么您无法保证“相同”的对象将返回相同的哈希值代码。
您应该使用哈希码的唯一目的是平衡哈希表。任何其他用途均属于“标签外”用途,风险由您自行承担。不要这样做。如果您需要一个可以跨任意边界工作的稳定字符串哈希,请使用 SHA256 等行业标准算法。
如果您对这个主题感兴趣,请参阅我关于哈希问题的文章存档以获取更多详细信息:
http://blogs.msdn.com/b/ericlippert/archive/tags/hashing/ http://blogs.msdn.com/b/ericlippert/archive/tags/hashing/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)