(同じタイプの) 2 つのリストを比較し、違いを返す次のメソッドがあります。このメソッドに任意のタイプのリストを受け入れるようにするにはどうすればよいですか?
var differences = list1.Where(x => list2.All(x1 => x1.Name != x.Name))
.Union(list2.Where(x => list1.All(x1 => x1.Name != x.Name)));
2 つのセット (順序の非依存性と多重度の非依存性) の違いを取得するには、次を使用できますHashSet<T>.SymmetricExceptWith(IEnumerable<T>)
。
public static IEnumerable<T> GetSymmetricDifference<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer = null)
{
HashSet<T> result = new HashSet<T>(list1, comparer);
result.SymmetricExceptWith(list2);
return result;
}
あなたの場合、それを使用するには:
var difference = GetSymmetricDifference(list1, list2, new MyComparer());
カスタム比較機能を使用:
public class MyComparer : IEqualityComparer<MyType>
{
public bool Equals(MyType x, MyType y)
{
return x.Name.Equals(y.Name);
}
public int GetHashCode(MyType obj)
{
return obj.Name == null ? 0 : obj.Name.GetHashCode();
}
}
これはどうですか:
var differences = list1.Except(list2).Union(list2.Except(list1));