Возвращаемое значение GetHashCode
гарантированно будет одинаковым для одного и того же объекта только при одном и том же выполнении приложения;не гарантируется, что он будет настолько надежным, если вы храните хеш-коды между выполнениями приложений.См. Документацию MSDN для System.Object.GetHashCode () для получения дополнительной информации («другой хэш-код может быть возвращен [GetHashCode], если приложение будет запущено снова».).Фактически, по состоянию на март 2016 года, хеш-коды теперь задокументированы, чтобы, возможно, отличаться между разными процессами и разными доменами приложений (даже внутри одного и того же процесса), см. Окно предупреждения в документации GetHashCode.
Возвращаемое значениеGetHashCode никогда не должен использоваться для определения равенства объектов.Также будет необходим вызов Equals.
Для получения инструкций по реализации GetHashCode см. Документацию Notes for Inheritors.
По реализации GetHashCode по умолчанию:
По умолчаниюРеализация метода GetHashCode не гарантирует уникальные возвращаемые значения для разных объектов.Кроме того, .NET Framework не гарантирует реализацию по умолчанию метода GetHashCode, и возвращаемое значение будет одинаковым для разных версий .NET Framework.Следовательно, реализация по умолчанию этого метода не должна использоваться в качестве уникального идентификатора объекта для целей хеширования.
(Обратите внимание, что это отличается, например, от реализации по умолчанию Java hashCode()
, который задокументирован, чтобы попытаться вернуть разные значения для разных объектов «настолько, насколько это практически возможно».)
Если вам нужна более стабильная хеш-функция, следовательно, вы должны использовать свою собственную,и что еще более важно, документируйте свою хеш-функцию, чтобы гарантировать ее стабильность и гарантировать, что пользователи могут положиться на ее стабильность.
Здесь есть несколько вариантов, например MurmurHash3 , MD5 и другие.Здесь важно документировать, какую хеш-функцию вы используете.