比较C#</myclass>中的两个List <myclass>

时间:2010-03-11 20:18:46

标签: c# .net list iequatable iequalitycomparer

我有一个名为

的班级
MyClass

这个类继承IEquatable并实现等于我需要的方式。 (含义:当我在代码中单独比较两个MyClass tyupe对象时,它可以工作)

然后我创建了两个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时,我应该得到真的吗?

ListA.Equals(ListB)==true; //???

3 个答案:

答案 0 :(得分:7)

尝试以下

ListA.SequenceEquals(ListB);

SequenceEquals是Enumerable类上可用的扩展方法。默认情况下,这在C#3.5项目中可用,因为它附带System.Linq

答案 1 :(得分:2)

答案 2 :(得分:0)

要回答你的问题,不,你不应该成真。 ListList<T>不定义.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。