C# 比较两个列表<;MyClass>;在C中#

C# 比较两个列表<;MyClass>;在C中#,c#,.net,list,iequatable,iequalitycomparer,C#,.net,List,Iequatable,Iequalitycomparer,我有一门课叫 MyClass 这个类继承了IEquatable,并以我需要的方式实现它。(意思是:当我在代码中分别比较两个MyClass tyupe对象时,它是有效的) 然后,我创建两个列表: var ListA = new List<MyClass>(); var ListB = new List<MyClass>(); // Add distinct objects that are equal to one another to // ListA and Lis

我有一门课叫

MyClass
这个类继承了IEquatable,并以我需要的方式实现它。(意思是:当我在代码中分别比较两个MyClass tyupe对象时,它是有效的)

然后,我创建两个列表:

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.SequenceEquals(ListB);

SequenceEquals是
可枚举类上可用的扩展方法。这在C#3.5项目中默认可用,因为它随系统一起提供。Linq要回答您的问题,不,您不应该得到正确答案
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

public static bool Equals(object objA, object objB)
{
    return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}