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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…