我有一个使用自己的自定义比较器的LINQ Distinct()语句,就像这样:
class MyComparer<T> : IEqualityComparer<T> where T : MyType
{
public bool Equals(T x, T y)
{
return x.Id.Equals(y.Id);
}
public int GetHashCode(T obj)
{
return obj.Id.GetHashCode();
}
}
...
var distincts = bundle.GetAllThings.Distinct(new MyComparer<MySubType>());
这一切都很好,按照我想要的方式工作。出于好奇,我需要定义自己的Comparer,还是可以用委托来替换它?我认为我应该能够像这样做:
var distincts = bundle.GetAllThings.Distinct((a,b) => a.Id == b.Id);
但是这段代码无法编译。有没有什么巧妙的方法?
Equals
实现中,你应该对x
和y
进行ReferenceEquals
检查以防止空引用。 - nicodemus13