Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在x64模式下运行时能否生成x86哈希值?_C#_C# 4.0 - Fatal编程技术网

C# 在x64模式下运行时能否生成x86哈希值?

C# 在x64模式下运行时能否生成x86哈希值?,c#,c#-4.0,C#,C# 4.0,本周,当我的代码托管在x64进程中时,我被一个bug咬了一口。我使用散列值进行查找,并将该散列值存储在数据库中。过去生成的散列值是x86散列,现在生成x64散列,因为查找值不再匹配,所以出现错误 我对此高度怀疑,但我想我还是会问。如果我的代码在x64进程中运行,是否有方法生成x86哈希值 作为参考,我使用C#在.NET4.0上运行 编辑: 以下是我遇到的问题: 通过使用以下代码创建控制台应用程序,可以复制此问题: "DDD.Events.Application.ApplicationRefere

本周,当我的代码托管在x64进程中时,我被一个bug咬了一口。我使用散列值进行查找,并将该散列值存储在数据库中。过去生成的散列值是x86散列,现在生成x64散列,因为查找值不再匹配,所以出现错误

我对此高度怀疑,但我想我还是会问。如果我的代码在x64进程中运行,是否有方法生成x86哈希值

作为参考,我使用C#在.NET4.0上运行

编辑:

以下是我遇到的问题:

通过使用以下代码创建控制台应用程序,可以复制此问题:

"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode()
在x86平台上运行应用程序,然后在x64平台上运行


我只想跨平台获得一致的值。但是,我可以创建一个预先编译的哈希列表,以便在需要时进行故障转移。我只是想知道是否有办法从GetHashCode()中获得一致的值。我不这么认为,但如果可能的话,这将是对我来说最简单的解决方案。

如果您在.NET中使用默认实现,恐怕这是不可能的。他们甚至不保证在不同版本的.NET之间返回相同的id;并明确声明它不能用作唯一标识符。

什么是x86和x64哈希?散列通常是通过一种不考虑平台和处理器的算法创建的。您是如何生成散列的?我们能看到代码吗?你能告诉我们为什么需要跨系统的一致值吗?@Kevin.NET中的每个对象都有GetHashCode方法,该方法可以像ToString一样被重写。我想他使用的是默认实现。@Petet,是的,这是我的问题,当我问这个问题时,他没有添加他是如何得到哈希的。我原本以为他可能在创建自己的,但这有点问题。我认为这是对的。我相信二进制序列化也表示,对于任何阅读的人来说,不能保证.NET版本之间是相同的。谢谢,我只是想确认一下。我已经找到了一种方法,可以与使用GetHashCode()方法序列化的类型兼容。我将创建一个属性,在这里我可以指定一个类型的“Id”,并将其分配给所有类型。该属性将有一个可选的“LegacyId”,我可以使用它查找使用旧方法序列化的类型。这样,我可以为所有类型提供一致的值。