Задать вопрос
@annaTomas

Зачем при переопределении object.Equals() переопределять object.GetHashCode()в C#?

Почему при переопределении object.Equals() настоятельно рекомендуется переопределить object.GetHashCode()?
  • Вопрос задан
  • 161 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Решения вопроса 2
Потомучто, например, GetHashCode используется в Dictionary и для одинаковых объектов ты, скорее всего, хочешь чтобы у них был одинаковый хэшкод.
Ответ написан
freeExec
@freeExec
Участник OpenStreetMap
Потому что они тесно связаны. Например Dictionary строить хеш-таблицу на основе HashCode и ищет объекты в ней по нему же, потому что это быстро и нужно сравнивать только одно число. А после того как найдёт подходящие объекты, сравнивает с искомым уже через Equals, чтобы наверняка убедиться, что это он.

А для пользовательских классов GetHashCode будет возвращать "рандомный мусор" (на самом деле там что-то завязано на расположение объекта в памяти), соответственно идентичные по содержимому объекты будет иметь разные HashCode, что негативно сказывается на некоторых механизмах.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы