这是我刚刚编写的相等比较器,因为我想从包含实体的列表中获取不同的项目。
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)除了优化之外还有别的作用吗?在比较引用时,因为微妙的差异,是否存在它们无法按预期方式运作的情况?
如果我想要,我能用以下代码替换(C)
return GetHashCode(x) == GetHashCode(y)