2 つのクラスがA
ありB
、プロパティの数が異なるとします。
class A
{
public int Pro1 { get; set; }
public string Pro2 { get; set; }
}
class B
{
public int Pro1 { get; set; }
public string Pro2 { get; set; }
public bool Pro3 { get; set; }
}
Distinct、Intesect などのラムダ メソッドで使用する構造的等値比較を行うには、次の 2 つのカスタムを作成する必要がありEqualityComparer
ます。
public class CustomComparerA : EqualityComparer<A> {}
// use all Pro1 and Pro2
public class CustomComparerB : EqualityComparer<B> {}
// use all Pro1, Pro2 and Pro3
10 個のエンティティがある場合、10 個のカスタム比較子を作成する必要があります。コードがあまりきれいではないようです。調べてみると、.NET フレームワークには組み込みクラスStructuralEqualityComparer
がありますが、 としてマークされており、ジェネリック バージョンinternal
がありません。私が見ているのは:
StructuralEqualityComparer<T>
私が再利用できるように:
listA.Distinct(new Structuralequalitycomparer<A>())
listA.Distinct(new Structuralequalitycomparer<B>())
これをサポートする組み込みクラス .NET を知っている人はいますか? そうでない場合、何か理由はありますか?
それとも自分たちで管理しなければなりませんか?