2010-12-16 1 views
15

Почему GetHashCode() возвращает другое значение для одной и той же строки? Я не могу описать, как дублировать это, но поверьте, что это не шутка, и что две следующие строки пришли из моего окна часов на две отдельные моменты времени:String.GetHashCode() возвращает разные значения

"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() -1386151123 int 
"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() 1858139950 int 

Как это могло произойти?

Я не знаю, помогает ли это, но я запускаю .NET 4.0 в VS 2010 и отлаживаю приложение NServiceBus.

Update:

Если вы хотите знать, что я в конечном итоге делает для этого взгляда на эту тему: Can you generate an x86 hash value when running in x64 mode?

ответ

11

По словам documentation:

Если две строковые объекты равны , метод GetHashCode возвращает одинаковые значения. Однако для каждого уникального значения строки не существует уникального значения хеш-кода. Различные строки могут возвращать один и тот же хэш-код.

Таким образом, некоторый другой эффект должен быть в игре для двух вызовов, чтобы дать разные результаты. Одна из теорий заключается в том, что вы переключали платформы между вызовами, от x86 до x64 или наоборот.

+4

Да, вы правы. Я подтвердил это, создав консольную программу и вызвав Console.WriteLine («DDD.Events.Application.ApplicationReferenceCreated» .GetHashCode()). Затем я меняю платформу и запускаю ее снова. Возвращаемые значения - это значения, упомянутые выше. – 2010-12-16 23:15:06