Đây là trình so sánh bình đẳng mà tôi vừa viết vì tôi muốn có một bộ các mục riêng biệt từ một danh sách chứa các thực thể.Câu hỏi về IEqualityComparer <T>/Danh sách <T> .Distinct()
class InvoiceComparer : IEqualityComparer<Invoice>
{
public bool Equals(Invoice x, Invoice y)
{
// A
if (Object.ReferenceEquals(x, y)) return true;
// B
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null)) return false;
// C
return x.TxnID == y.TxnID;
}
public int GetHashCode(Invoice obj)
{
if (Object.ReferenceEquals(obj, null)) return 0;
return obj.TxnID2.GetHashCode();
}
}
- Tại sao
Distinct
đòi hỏi một Comparer như trái ngược với mộtFunc<T,T,bool>
? - Có (A) và (B) bất kỳ điều gì khác ngoài tối ưu hóa và có các tình huống khi chúng không hoạt động theo cách mong đợi, do tính phụ thuộc trong so sánh các tham chiếu không?
Nếu tôi muốn, tôi có thể thay thế (C) với
return GetHashCode(x) == GetHashCode(y)
quan sát ngẫu nhiên tự agrandizing: điều này có thể làm cho một thi tốt quetion –