Skip to content

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Завантаження...

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

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


Це пов’язано з тим, що фреймворк вимагає, щоб два однакові об’єкти мали однаковий хеш-код. Якщо ви перевизначите метод equals для спеціального порівняння двох об’єктів, і ці два об’єкти вважатимуться методом однаковими, то хеш-код цих двох об’єктів також має бути однаковим. (Словники та хеш-таблиці покладаються на цей принцип).

Перевизначати GetHashCode важливо, якщо ваш елемент буде використовуватися як ключ у Dictionary, або HashSet, тощо. – оскільки він використовується для групування елементів і подальшого пошуку. Якщо хеш-код для двох елементів не збігається, вони ніколи не вважатимуться рівними (функція Equals просто ніколи не буде викликана).

Розглянемо на невеликому прикладі:

Насправді дуже складно правильно реалізувати GetHashCode(), тому що, на додаток до вже згаданих правил, хеш-код не повинен змінюватися протягом життя об’єкта. Тому поля, які використовуються для обчислення хеш-коду, мають бути незмінними.

Published inВідповіді на запитання C#
Subscribe
Notify of
guest
0 комментариев
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x