Это плохой шаблон для генерации хешей для объекта.
Важно не понимать цели GetHashCode () - это способ генерировать числовое представление идентифицирующих свойств объекта. Хеш-коды используются, чтобы позволить объекту служить ключом в словаре и в некоторых случаях ускорять сравнение между сложными типами.
Если вы просто сгенерируете случайное значение и назовете его хеш-кодом, у вас не будет повторяемости. Другой экземпляр с такими же ключевыми полями будет иметь другой хеш-код и будет нарушать поведение, ожидаемое такими классами, как HashSet, Dictionary и т. Д.
Если у вас уже есть идентифицирующий строковый член в вашем объекте, просто верните его хеш-код.
Документация на MSDN для разработчиков GetHashCode()
является обязательной для чтения для всех, кто планирует переопределить этот метод:
Примечания для разработчиков
Хеш-функция
используется для быстрой генерации числа
(хэш-код), который соответствует
стоимость объекта. Хэш-функции
обычно специфичны для каждого типа и, для
уникальность, должен использовать хотя бы один из
поля экземпляра в качестве входных данных.
Хеш-функция должна иметь
следующие свойства:
Если два объекта сравниваются как равные,
Метод GetHashCode для каждого объекта
должен вернуть то же значение. Тем не мение,
если два объекта не сравниваются как
равны, методы GetHashCode для
два объекта не должны возвращаться
разные значения.
Метод GetHashCode для объекта
должен последовательно возвращать один и тот же хеш
код до тех пор, пока нет
изменение состояния объекта, что
определяет возвращаемое значение
метод Equals объекта. Обратите внимание, что это
верно только для текущего выполнения
приложения, и что
другой хэш-код может быть возвращен, если
приложение запускается снова.
Для лучшей производительности, хеш
функция должна генерировать случайный
Распределение для всего ввода.
Например, реализация
Метод GetHashCode, предоставляемый
Класс String возвращает идентичный хеш
коды для одинаковых строковых значений.
Поэтому два объекта String возвращают
тот же хэш-код, если они представляют
то же самое строковое значение. Так же
Метод использует все символы в
строка для генерации случайным образом
распределенный вывод, даже когда
вход сгруппирован в определенных диапазонах
(например, многие пользователи могут иметь
строки, содержащие только нижнюю
128 символов ASCII, даже если
Строка может содержать любой из 65 535
Символы Юникода).