В настоящее время мы широко используем метод GetHashCode для хранения хэш-кодов в базе данных для отслеживания уникальных элементов. MSDN имеет ужасную запись об этом здесьИспользование ToHashCode для хранения хэша в базе данных?
«Реализация метода GetHashCode по умолчанию не гарантирует уникальные возвращаемые значения для разных объектов. Кроме того, .NET Framework не гарантирует стандартную реализацию метода GetHashCode, а значение он будет одинаковым для разных версий .NET Framework. Следовательно, реализация этого метода по умолчанию не должна использоваться как уникальный идентификатор объекта для целей хэширования. "
Мы использовали этот подход в течение нескольких лет без проблем. Должны ли мы волноваться, и если да, то какой будет лучший подход?
Чтобы уточнить, данные поступают из внешнего источника. Мы берем от двух до трех строковых полей, добавляя их вместе в новую строку, а затем используем GetHashCode.
Неправильное присвоение GetHashCode для возврата различных значений между вызовами является ужасной идеей и будет ломаться намного больше, чем исправления. Вариант 2 избавляет вас от -1. – spender
hmm ... кажется странным, поскольку MSDN рекомендует переопределять GetHashCode, чтобы гарантировать, что он возвращает уникальные значения. –
, но вы должны возвращать одно и то же уникальное значение для объекта каждый раз. Каждый новый алгоритм будет нарушать это.Выяснение того, как получить один и тот же Guid каждый раз, намного больше, чем использование детерминированного алгоритма для построения уникального значения для сложного объекта. – tvanfosson