[英]Comparing equality of two complex objects
我有两个 List,这个复杂的对象有 4 个引用类型的公共属性。 我如何将一个列表与另一个列表进行比较,以确定这些列表的大小和值是否相等。
我在 ComplexObject 中实现了 Equals 以帮助进行相等检查
public Type1 Type1 { get; set; }
public IEnumerable<Type2> Type2s{ get; set; }
public Type3 Type3{ get; set; }
public Type4 Type4 { get; set; }
public bool Equals(ComplexObject complexObject)
{
int type2sCount = Type2s.Count();
return Type1 .Equals(complexObject.Type1) &&
Type3.Equals(complexObject.Type3) &&
Type4.Equals(complexObject.Type4) &&
Type2s.Intersect(complexObject.Type2s).Count() == type2sCount;
}
我还需要打印出第二个列表中不适合或没有配对的项目
谢谢
如果先对两个列表进行排序,则可以使用SequencyEqual扩展方法来检查两个序列是否相等。 此方法是 System.Linq 的一部分。
下面是一个例子:
List<ComplexObject> list1 = new List<ComplexObject>();
List<ComplexObject> list2 = new List<ComplexObject>();
IOrderedEnumerable<ComplexObject> list1Sorted = list1.OrderBy(item => item.SomeProperty);
IOrderedEnumerable<ComplexObject> list2Sorted = list2.OrderBy(item => item.SomeProperty);
bool areEqual = list1Sorted.SequenceEqual(list2Sorted);
列表的最简单方法是SequenceEqual
,但您需要小心null
s:
public bool Equals(ComplexObject complexObject)
{
bool eq = Equals(Type1, complexObject.Type1)
&& Equals(Type3, complexObject.Type3)
&& Equals(Type4, complexObject.Type4);
if (eq)
{
if(Type2s == null)
{
if(complexObject.Type2s != null) eq = false;
} else {
eq = complexObject.Type2s == null ? false
: Type2s.SequenceEqual(complexObject.Type2s);
}
}
return eq;
}
查看 IEqualityComparer(T)。 您实现了接口成员,如果您使用的是 LINQ,它将起作用,您应该能够对列表进行 AND 操作。 http://msdn.microsoft.com/en-us/library/ms132151.aspx
您可以使用SequenceEqual(List1, List2)
bool equal = Type2s.SequenceEqual(complexObject.Type2s);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.