这是我刚才写的等号比较器,因为我想从包含实体的列表中选择一组不同的项目。关于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