Как мне убедиться, что List <T>.Contains (T) работает с моим пользовательским классом? - PullRequest
2 голосов
/ 27 февраля 2009

Я использую .net 2.0 (C #)

У меня есть класс Person, и я изучаю список p из базы данных.

я точно знаю, что в моем списке есть дубликаты, но когда я пытаюсь удалить дубликаты , они не удаляются.

Должен ли мой класс Person реализовать какие-либо интерфейсы для List .Contains (T) для правильной работы?

Есть еще идеи?

Спасибо.

Ответы [ 5 ]

8 голосов
/ 27 февраля 2009

Ваш класс Person должен реализовать IEquatable

4 голосов
/ 27 февраля 2009

Вы должны переопределить равно и GetHashCode метод.

1 голос
/ 27 февраля 2009

Пример, на который вы ссылаетесь, не является решением для удаления дубликатов из списка, это функция, которая берет список и выдает итератор, который исключает дубликаты. Если вам нужно дедуплицировать весь список за один раз, вам нужно взять IEnumerable<T>, возвращенный функцией, и передать его в новый List<T>.

1 голос
/ 27 февраля 2009

Вам нужно перегрузить Object.Equals (Object obj) в вашем классе.

0 голосов
/ 27 февраля 2009

В документах говорится "Этот метод определяет равенство с помощью средства сравнения по умолчанию EqualityComparer(T).Default".

...