How does Distinct() work?

后端 未结 2 666
暗喜
暗喜 2020-12-11 23:12

Lets say i have this:

class Foo
{
    public Guid id;
    public string description;
}

var list = new List();
list.Add(new Foo() { id = Guid.Empt         


        
相关标签:
2条回答
  • 2020-12-11 23:28

    You have to override Foo.Equals (and subsequently Foo.GetHashCode) to explicitly compare each field. Otherwise it will use the default implementation, Object.Equals (ReferenceEquals).

    Or, you can explicitly pass an IEqualityComparer to the Distinct() method.


    Note though that using anonymous classes does return 3 elements. Depending on where you want to use Foo and how much compile-time type safety you need, you could do:

    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
    
    0 讨论(0)
  • 2020-12-11 23:39

    It compares each two items using EqualityComparer.Default until specified another implementation of IEqualityComparer

    0 讨论(0)
提交回复
热议问题