2010-09-03 98 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定义以使其工作?我为MyType实现了Equals(object obj)CompareTo(object obj),但这些方法都没有被调用。

+0

在“选择”后面过滤(即调用“Where”)可能会更快。 – 2010-09-03 20:22:30

+0

'DefaultEqualityComparer'倾向于使用'IEquatable .Equals(MyType)'而不是'System.Object.Equals(Object)'。 – 2010-09-03 20:25:01

回答

4

您是否正确实现了GetHashCode,以匹配您的Equals方法?它不会使用CompareTo(这是订购),但使用GetHashCodeEquals

如果您确信已经完成了此操作,请发布EqualsGetHashCode的代码。

+0

我错过了'GetHashCode'。我现在添加它。 – a1ex07 2010-09-03 20:28:44

+1

@ a1ex07:嗯...... C#编译器应该已经警告过你... – 2010-09-03 20:30:30

+0

非常感谢。你是对的,编译器实际上是警告过我的,我应该自己弄明白了...... – a1ex07 2010-09-03 20:44:24