32-битный GetHashCode() в 64-битной.NET 4.5 CLR
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