3

我有一堂课叫

MyClass

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

然后我创建两个列表:

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; //???
4

3 回答 3

7

尝试以下

ListA.SequenceEquals(ListB);

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

于 2010-03-11T20:21:48.927 回答
2

Enumerable.SequenceEqual

于 2010-03-11T20:22:23.510 回答
0

要回答你的问题,不,你不应该是真的。List并且List<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。

于 2010-03-11T20:59:20.190 回答