在C#中比较两个List<MyClass>

3
我有一个叫做的类

MyClass

这个类继承了IEquatable并且实现了我需要的相等比较方式。(也就是说,当我在代码中单独比较两个MyClass类型的对象时,它能够正常工作)

然后我创建了两个List:

var ListA = new List<MyClass>();
var ListB = new List<MyClass>();
// Add distinct objects that are equal to one another to 
// ListA and ListB in such a way that they are not added in the same order.

当我比较ListA和ListB时,我应该得到true吗?
ListA.Equals(ListB)==true; //???
3个回答

7
请尝试以下操作:
ListA.SequenceEquals(ListB);

SequenceEquals是可用于Enumerable类的扩展方法。在C# 3.5项目中,它默认可用,因为它随着System.Linq一起提供。



0
回答你的问题,不,你不应该得到 true。List 和 List 没有定义 .Equals,所以它们继承了 Object.Equals,它会检查以下内容:
public static bool Equals(object objA, object objB)
{
    return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}

objA.Equals(objB)是虚拟的。如果我没记错的话,默认实现只检查引用相等性(指向内存中的同一对象),因此您的代码将返回false。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接