C# GetHashCode()返回不同的值

C# GetHashCode()返回不同的值,c#,string,.net-4.0,gethashcode,C#,String,.net 4.0,Gethashcode,为什么GetHashCode()会为同一字符串返回不同的值?我无法描述如何复制它,但请相信这不是一个恶作剧,以下两行是在两个不同的时间从我的手表窗口发出的: "DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() -1386151123 int "DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() 1858139950 int 这怎么会发

为什么GetHashCode()会为同一字符串返回不同的值?我无法描述如何复制它,但请相信这不是一个恶作剧,以下两行是在两个不同的时间从我的手表窗口发出的:

"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() -1386151123 int
"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() 1858139950 int
这怎么会发生

我不知道这是否有帮助,但我正在VS2010的.NET4.0上运行,我正在调试一个NServiceBus应用程序

更新:

如果你想知道我最后做了什么,看看这个帖子:

根据:

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


因此,为了使两次调用产生不同的结果,必须有其他一些影响。一种理论是,您在调用之间切换平台,从x86切换到x64,反之亦然。

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

我也有同样的问题。我复制了值,但BOM表标题在第一个位置不可见

试着检查长度,你已经看到了差异。
你也可以逐字节检查。

是的,你说得对。我已经通过创建一个控制台程序并调用console.WriteLine(“DDD.Events.Application.ApplicationReferenceCreated.GetHashCode())确认了这一点。然后我更改平台并再次运行它。返回的值是我上面提到的值。我确认在从单元测试创建哈希代码,然后在主应用程序中比较它们时遇到了相同的问题。
Object.GetHashCode
()的文档说明:“对象的GetHashCode方法必须始终返回相同的哈希代码,只要不修改确定对象的Equals方法返回值的对象状态。请注意,这仅适用于应用程序的当前执行,如果再次运行该应用程序,则可以返回不同的哈希代码。“换句话说,永远不要保留哈希代码,也不要依赖于它们在一次运行到下一次运行时是相同的。如果确实需要持久的哈希代码,请创建一个与设备无关的序列化方法(json、XML、协议缓冲区等),将其应用于对象以获取字节[],然后对其应用哈希算法(md5、sha1等).1.+1在
一个理论之后的答案部分…
是答案的重要部分,解决了我的问题。另一部分是显而易见的!它不仅在切换平台时返回不同的结果,而且对于我在Linux上使用.Net 5时,每次启动都返回不同的结果。它只在应用程序运行时保持不变跑步