32-битный GetHashCode() в 64-битной.NET 4.5 CLR

На 64-битной платформе.NET 4.5 можно в любом случае вычислить, что будет результатом метода GetHashCode() строки на 32-битной платформе.NET 4.5?

Очевидно, что это не очень хорошая идея. Это было спрошено и объяснено здесь и здесь. Только ответ, который говорит, как это сделать, будет принят.

1 ответ

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

Другие вопросы по тегам