2010-09-03 3 views
1

У меня есть следующий код:Найти дубликаты в списке

List<MyType> myList = new List<MyType>(); 
// ... add items to the list 
var dupes = myList.GroupBy(g => g).Where(x => (x.Count() > 1)) 
        .Select(x => new { obj = x.Key, count = x.Count() }).ToList(); 

dupe всегда пусто, даже если я намеренно вставить дубликатов в список. Что я должен добавить в определение MyType, чтобы заставить его работать? Я применил Equals(object obj) и CompareTo(object obj) для MyType, но ни один из этих методов не вызван.

+0

Вероятно, более быстрая фильтрация (т. Е. Вызов 'Where') после' Select'. –

+0

'DefaultEqualityComparer' предпочитает использовать' IEquatable .Equals (MyType) ', а не' System.Object.Equals (Object) '. –

ответ

4

Вы внедрили GetHashCode правильно, чтобы соответствовать вашему методу Equals? Он не будет использовать CompareTo (то есть для заказа), но будет использовать GetHashCode и Equals.

Если вы считаете, что уже сделали это, пожалуйста, напишите код для Equals и GetHashCode.

+0

Я пропустил 'GetHashCode'. Я добавляю это сейчас. – a1ex07

+1

@ a1ex07: Хм ... компилятор C# должен был предупредить вас об этом ... –

+0

Большое спасибо. Вы были правы, компилятор действительно предупредил меня об этом, я должен был понять это сам ... – a1ex07