Сравнение двух List‹MyClass› в C#

У меня есть класс под названием

MyClass

Этот класс наследует IEquatable и реализует equals так, как мне нужно. (Значение: когда я сравниваю два объекта тюпе 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; //???

person Matt    schedule 11.03.2010    source источник


Ответы (3)


Попробуйте следующее

ListA.SequenceEquals(ListB);

SequenceEquals — это метод расширения, доступный в классе Enumerable. Это доступно по умолчанию в проектах C# 3.5, поскольку оно поставляется с System.Linq.

person JaredPar    schedule 11.03.2010

Enumerable.SequenceEqual

person leppie    schedule 11.03.2010

Отвечая на ваш вопрос, нет, вы не должны получать истину. 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.

person Pat    schedule 11.03.2010