String.GetHashCode()返回不同的值

时间:2010-12-16 22:47:33

标签: c# string .net-4.0 gethashcode

为什么GetHashCode()为同一个字符串返回不同的值?我无法描述如何复制这个,但相信这不是一个恶作剧,以下两行来自我的观察窗口,分别是两次:

"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() -1386151123 int
"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() 1858139950 int

这怎么可能发生?

我不知道这是否有帮助,但我在VS 2010中运行.NET 4.0并且我正在调试NServiceBus应用程序。

更新

如果你想知道我最后做了什么,请看看这个帖子:Can you generate an x86 hash value when running in x64 mode?

2 个答案:

答案 0 :(得分:12)

根据documentation

  

如果两个字符串对象相等,则GetHashCode方法返回相同的值。但是,每个唯一字符串值都没有唯一的哈希码值。不同的字符串可以返回相同的哈希码。

因此,两个调用必须发挥一些其他效果才能产生不同的结果。一种理论是你在调用之间切换平台,从x86到x64,反之亦然。

答案 1 :(得分:0)

您是否有可能从某个地方复制了此字符串?

我有同样的问题。我以某种方式复制了值ans,BOM标头在第一个位置不可见。

尝试检查长度,您会发现已经有所不同。 您也可以逐字节检查。