Внутренняя реализация .NET HashSet содержит метод? - PullRequest
3 голосов
/ 05 сентября 2010

Я пишу тест для моей библиотеки, написанной на C #. И я хочу проверить, являются ли два списка одинаковыми, если и только если они имеют одинаковые элементы (не требуют элементов в одинаковом порядке). Я пытаюсь преобразовать список в hashset и проверить, совпадают ли два hashset. Но результат не соответствует ожиданиям.

Может кто-нибудь объяснить, как работает метод hashset содержит? Сравнивает ли он два объекта методом getHashCode объектов или методом equals? Спасибо!

1 Ответ

4 голосов
/ 05 сентября 2010

Он использует IEqualityComparer <>, который вы передали конструктору HashSet.Если вы не передали один, то он использует EqualityComparer <>. По умолчанию.Который, если тип элемента не реализует IEquatable <>, использует методы Equals и GetHashCode типа.

Я бы предположил, что ваш список содержит объекты, которые не переопределяют эти методы.Для исправления используйте аргумент конструктора IEqualityComparer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...