使用 GroupBy()
和 Count() > 1
,我试图在列表中查找我的类的重复实例。
该类看起来像这样:
public class SampleObject
{
public string Id;
public IEnumerable<string> Events;
}
这是我如何实例化和分组列表的方法:
public class Program
{
private static void Main(string[] args)
{
var items = new List<SampleObject>()
{
new SampleObject() { Id = "Id", Events = new List<string>() { "ExampleEvent" } },
new SampleObject() { Id = "Id", Events = new List<string>() { "ExampleEvent" } }
};
var duplicates = items.GroupBy(x => new { Token = x.Id, x.Events })
.Where(g => g.Count() > 1)
.Select(g => g.Key)
.ToList();
}
}
duplicates
不包含任何项。我该如何使分组工作?
GetHashCode
和Equals
的重写。 - Enigmativitynew { Token = x.Id, x.Events }
这段代码没有重写SampleObject
的Equals
和GetHashCode
方法,导致问题完全由x.Events
的比较引起。请注意不要改变原意,使内容更易懂。 - Sergey Berezovskiystring.Join
)是经典的,并且通常“足够好”。我会使用'\0'
作为分隔符。另外一个“事情”...然后我会使用.Select(g => g.First())
来获取重复的项目。 - xanatos