c# – 关于IEqualityComparer / List.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)除了优化之外还有什么其他情况,并且由于比较参考文件的细微之处,是否存在不按预期方式行事的情况?
>如果我想,我可以替换(C)
return GetHashCode(x)== GetHashCode(y)
解决方法:
>因此它可以使用哈希码为O(n)而不是O(n2)
>(A)是一种优化.
(B)是必要的;否则,它会抛出NullReferenceException.
但是,如果Invoice是一个结构,那么它们既不必要又慢.
>不.Hashcodes不是唯一的
标签:c,iequalitycomparer 来源: https://codeday.me/bug/20190521/1146965.html