@annaTomas

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

Почему при переопределении object.Equals() настоятельно рекомендуется переопределить object.GetHashCode()?
  • Вопрос задан
  • 154 просмотра
Решения вопроса 2
Потомучто, например, GetHashCode используется в Dictionary и для одинаковых объектов ты, скорее всего, хочешь чтобы у них был одинаковый хэшкод.
Ответ написан
freeExec
@freeExec
Участник OpenStreetMap
Потому что они тесно связаны. Например Dictionary строить хеш-таблицу на основе HashCode и ищет объекты в ней по нему же, потому что это быстро и нужно сравнивать только одно число. А после того как найдёт подходящие объекты, сравнивает с искомым уже через Equals, чтобы наверняка убедиться, что это он.

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

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

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