64位.NET 4.5 CLR上的32位GetHashCode()

时间:2014-03-31 23:22:02

标签: c# .net string hashcode gethashcode

在64位.NET 4.5平台上,无论如何都要计算32位.NET 4.5平台上字符串的GetHashCode()方法的结果?

很明显,这不是一个好主意。已经询问并解释了herehere。只有答案说明如何做才会被接受。

1 个答案:

答案 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()值,如果关闭程序并重新打开它,很可能会得到一个新值。

唯一能为您提供可靠结果的解决方案是修复数据库的设计,使其不存储.NET内置的GetHashCode()