gpt4 book ai didi

c# - Distinct() 是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 13:23:02 25 4
gpt4 key购买 nike

假设我有这个:

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" });

现在,当我这样做时:

list = list.Distinct().Tolist();

它显然返回 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

关于c# - Distinct() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15423632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com