我生成一个名为Exceptions的对象列表:
public class Exceptions
{
public bool deleted { get; set; }
public DateTime OriginalDate { get; set; }
public DateTime StartUtc { get; set; }
public DateTime EndUtc { get; set; }
public Int32 NumParticipants { get; set; }
public String Subject { get; set; }
public String Location { get; set; }
}
列表A有2个对象,列表B有3个对象
我期待一个新的列表,它显示了两个对象之间的区别
我尝试使用以下功能:
var ListC = ListA.Except(ListB).ToList();
我在ListC中得到两个看起来与ListA完全相同的对象。但我希望列表B中缺少对象。
我做错了什么?答案 0 :(得分:0)
Expect
使用默认的相等比较器来比较您的对象,通过 reference 比较它们。您需要实现自定义相等比较器并将该比较器与Except方法一起使用。
如果您不知道如何为您的类型实施IEqualityComparer<T>
,则可以在MSDN上找到示例。
答案 1 :(得分:0)
你需要这样做:
var ListC = ListA.Except(ListB).Union(ListB.Except(ListA))
答案 2 :(得分:0)
我建议您覆盖Equals()
和GetHashCode()
,以便比较符合您的期望。
public class Exceptions
{
public override bool Equals(object o)
{
return this.Equals(o as Exceptions);
}
public bool Equals(Exceptions ex)
{
if(ex == null)
return false;
else
{
// Do comparison here
}
}
}
答案 3 :(得分:0)
Linq替代,可能会有更快的方法: HashSet.SymmetricExceptWith():
var exceptions = new HashSet(listA);
exceptions.SymmetricExceptWith(listB);