oje*_*jek 3 .net c# linq distinct
让我说我有这个:
class Foo
{
public Guid id;
public string description;
}
var list = new List<Foo>();
list.Add(new Foo() { id = Guid.Empty, description = "empty" });
list.Add(new Foo() { id = Guid.Empty, description = "empty" });
list.Add(new Foo() { id = Guid.NewGuid(), description = "notempty" });
list.Add(new Foo() { id = Guid.NewGuid(), description = "notempty2" });
Run Code Online (Sandbox Code Playgroud)
现在,当我这样做时:
list = list.Distinct().Tolist();
Run Code Online (Sandbox Code Playgroud)
它显然返回4个元素.我想要一个方法,比较我在课堂上的所有数据,并返回唯一的元素,检查类的每个属性.我是否需要编写自己的比较器,或者是否存在内置的以这种方式工作的东西?
您必须覆盖Foo.Equals(以及随后Foo.GetHashCode)以明确比较每个字段.否则它将使用默认实现Object.Equals(ReferenceEquals).
或者,您可以显式传递IEqualityComparer给Distinct()方法.
请注意,使用匿名类确实返回3个元素.根据您要使用的位置Foo以及所需的编译时类型安全性,您可以执行以下操作:
var list = new List<dynamic>();
list.Add(new { id = Guid.Empty, description = "empty" });
list.Add(new { id = Guid.Empty, description = "empty" });
list.Add(new { id = Guid.NewGuid(), description = "notempty" });
list.Add(new { id = Guid.NewGuid(), description = "notempty2" });
list = list.Distinct().ToList(); //3 elements selected
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3679 次 |
| 最近记录: |