假设我有一个名为 MyClass 的类,它有两个属性(int Id 和一个字符串 Name)。我想从另一个集合中填充这些 MyClass 对象的列表,但我只想要唯一的。这个另一个集合是一个第 3 方对象,它有一个名为“Properties”的属性,它只是一个值数组,其中前两个对应于我关心的 Id 和 Name 值。此集合中可能有重复项,因此我只想要唯一的。
看起来这应该可以解决问题,但事实并非如此,它会返回所有项目,而不管重复项。我在这里做错了什么?
List<MyClass> items = (from MyClass mc in collectionOfProps
select new MyClass() {
Id = collectionOfProps.Properties[0],
Name = collectionOfProps.Properties[1] }).Distinct().ToList();
最佳答案
问题很可能是MyClass
没有实现 IEquatable<MyClass>
以及覆盖 Equals
和 GetHashCode
.
为了制作Distinct()
按照你想要的方式工作,你必须实现 IEquatable<T>
.否则,它使用默认值(引用相等性)进行检查,这意味着它只会确定元素是否不同,如果它们是完全相同的实例。
关于c# - 为什么这个 LINQ 查询没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8126160/