Чтобы получить разницу между двумя наборами (с независимостью порядка и кратности независимости), вы можете использовать: 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();
}
}
Смотреть Http: // StackOverflow .com/вопросы/6462870/Compare-два-родовые-листы – user1929959