這是我剛纔寫的等號比較器,因爲我想從包含實體的列表中選擇一組不同的項目。關於IEqualityComparer的問題<T> /列表<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();
}
}
- 爲什麼
Distinct
需要一個比較器,而不是一個Func<T,T,bool>
? - (A)和(B)除了優化之外是否還有其他內容,並且由於比較引用的細微程度,他們是否會以不可預期的方式行事?
如果我想,我能與
return GetHashCode(x) == GetHashCode(y)
隨機self-agrandizing觀察:這可能會使一個很好的考試queuing – 2011-12-15 22:03:13