Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Удалить дубликаты из List<T>

#c_sharp #list


Есть список 

List list = new List liIDs = list.Distinct().ToList();


Но дубли почему то остаются. Как было 4 элемента, так и осталось. Для примера привел
содержимое 0 и 2 списка которые по сути и являются дублированными. 

    


Ответы

Ответ 1



Скорее всего DB это класс, в котором не переопределен Equals/GetHashCode. По умолчанию эквивалентными считаются те ссылки, которые указывают на один и тот же объект. Возможные решения: Переопределите Equals так, чтобы он сравнивал два экземпляра по свойствам. Не забудьте при этом переопределить GetHashCode - можно свести его к вызову GetHashCode у одного из свойств. Реализуйте в классе DB интерфейс IEquatable Используйте перегрузку Distinct которая принимает IEqualityComparer. Поменяйте class DB на struct DB - структуры сравниваются по значению свойств.

Ответ 2



Для класса DB нужно реализовать Equals() и GetHashCode(), унаследованные от object.

Комментариев нет:

Отправить комментарий