Перейти к содержанию

Почему важно переопределить GetHashCode, когда переопределяется метод Equals? [C#]

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

[ Полезный рекламный блок ]

Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.


Это связано с тем, что фреймворк требует, чтобы два одинаковых объекта имели одинаковый хэш-код. Если вы переопределите метод equals для специального сравнения двух объектов, и эти два объекта будут считаться методом одинаковыми, то хэш-код этих двух объектов также должен быть одинаковым. (Словари и хэш-таблицы полагаются на этот принцип).

Переопределять GetHashCode важно, если ваш элемент будет использоваться как ключ в Dictionary, или HashSet, и т.д. — поскольку он используется для группировки элементов и дальнейшего поиска. Если хэш-код для двух элементов не совпадает, они никогда не будут считаться равными (функция Equals просто никогда не будет вызвана).

Рассмотрим на небольшом примере:

На самом деле очень сложно правильно реализовать GetHashCode(), потому что, в дополнение к уже упомянутым правилам, хэш-код не должен меняться в течение жизни объекта. Поэтому поля, которые используются для вычисления хэш-кода, должны быть неизменяемыми.

Опубликовано в рубрикеОтветы на Вопросы C#
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x