2014-03-31 46 views
-1

在64位.NET 4.5平台上,是否有计算字符串的GetHashCode()方法在32位上的结果.NET 4.5平台?64位.NET 4.5上的32位GetHashCode(CLR)

这显然不是一个好主意。这已被询问并解释herehere。只有一个答案说如何做到这一点将被接受。

+1

你为什么想知道如何做到这一点的设计? 'GetHashCode()'只对程序的一次运行(在单个应用程序域中)是确定性的。我不明白你的问题与你连接的两个人有什么不同,答案是“你不能”。 –

+0

应用程序正在运行的数据库需要它。这是原始开发人员做出的糟糕的设计决定。知道这个问题的答案将是解决它的最简单的方法。 – Joshcodes

+0

请不要编辑问题的答案。这个问题是获得投票重新打开。我正在寻找自己投票的方式,也许。 –

回答

2

GetHashCode()不是32位或64位特定的,因此在32位系统上调用它与在64位系统上调用它相同。

看来你正试图重用哈希码来实现某种序列化目的。你无法可靠地做到这一点。如果它更容易,请将字符串GetHashCode()函数视为以下内容。

static Dictionary <string, int> HashCodes = new Dictionary<string, int>(); 
static Random Rand = new Random(); 

static int PsudoGetHashCode(string stringInQuestion) 
{ 
    lock(HashCodes) 
    { 
     int result; 
     if(!HashCodes.TryGetValue(stringInQuestion, out result) 
     { 
      result = Rand.Next(); 
      HashCodes[stringInQuestion] = result; 
     } 

     return result; 
    } 
} 

你只能保证获得相同的GetHashCode()值每程序的运行相同的字符串,如果你关闭程序并重新打开它,你可以很可能获得新的价值。

,会给你可靠的结果,你唯一的办法就是解决您的数据库不存储内置GetHashCode()从.NET