@annaTomas

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

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

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

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

Войти через центр авторизации
Похожие вопросы