これは、エンティティを含むリストから個別のアイテムセットが必要だったため、先ほど作成した等式比較ツールです。
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)