Tôi có một biệt() tuyên bố LINQ sử dụng comparer tùy chỉnh của riêng tôi, như thế này:Sử dụng một đại biểu cho comparer bình đẳng cho LINQ của biệt()
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>());
Đây là tất cả tiền phạt và dandy và làm việc như tôi muốn. Trong sự tò mò, tôi có cần phải xác định Comparer của riêng tôi, hoặc tôi có thể thay thế nó bằng một đại biểu? Tôi nghĩ tôi có thể làm một việc như sau:
var distincts = bundle.GetAllThings.Distinct((a,b) => a.Id == b.Id);
Nhưng điều này không biên dịch. Có thủ thuật gọn gàng không?
Bạn nên có một 'ReferenceEquals' kiểm tra chống lại null trên 'x' và' y' trong' thực hiện Equals' của bạn. – nicodemus13