Сравнение двух списков <MyClass>в C # - PullRequest
3 голосов
/ 11 марта 2010

У меня есть класс с именем

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.Equals(ListB)==true; //???

Ответы [ 3 ]

7 голосов
/ 11 марта 2010

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

ListA.SequenceEquals(ListB);

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

2 голосов
/ 11 марта 2010
0 голосов
/ 11 марта 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.

...