如果您已经覆盖了Equals
并且GetHashcode
可以Enumerable.Union
直接使用:
var ListC = ListA.Union(ListB).ToList();
否则,您可以实施IEqulityCompararer<Foo>
和使用ListA.Union(ListB, comparer)
.
假设Foo
是您的类的类型,并且Name
是您要用于检测重复项的属性。
public class FooComparer : IEqualityComparer<Foo>
{
public bool Equals(Foo x, Foo y)
{
if (x == null || y == null) return false;
// 'A' = 'a' just to demonstrate case-insensitive duplicates
return x.Name.Equals(y.Name, StringComparison.OrdinalIgnoreCase);
}
public int GetHashCode(Foo obj)
{
if (obj == null) return int.MinValue;
return obj.Name.GetHashCode();
}
}
现在将此比较器用于Union
:
var ListC = ListA.Union(ListB, new FooComparer()).ToList();