假设我有一个名为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)
问题很可能是MyClass没有实现IEquatable<MyClass>以及覆盖Equals和GetHashCode.
为了Distinct()按照你想要的方式工作,你必须实现IEquatable<T>.否则,它使用默认(引用相等)进行检查,这意味着只有在它们是完全相同的实例时才会确定元素不是不同的.