为什么这个LINQ查询不能按预期工作?

sna*_*nap 2 c# linq

假设我有一个名为MyClass的类,它有两个属性(int Id和一个字符串Name).我想从另一个集合中填充这些MyClass对象的List,但我只想要唯一的.这个其他集合是第三方对象,它有一个名为'Properties'的属性,它只是一个值数组,前两个对应于我关心的Id和Name值.这个系列可能有重复,所以我只想要独一无二的.

似乎这应该做的伎俩,但它没有,它返回所有项目,无论欺骗.我在这做错了什么?

List<MyClass> items = (from MyClass mc in collectionOfProps 
select new MyClass() { 
Id = collectionOfProps.Properties[0], 
Name = collectionOfProps.Properties[1] }).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 6

问题很可能是MyClass没有实现IEquatable<MyClass>以及覆盖EqualsGetHashCode.

为了Distinct()按照你想要的方式工作,你必须实现IEquatable<T>.否则,它使用默认(引用相等)进行检查,这意味着只有在它们是完全相同的实例时才会确定元素不是不同的.