Сравнение двух списков<MyClass> на C#
-
19-09-2019 - |
Вопрос
У меня есть класс под названием
MyClass
Этот класс наследует IEquatable и реализует equals так, как мне это нужно.(Значение:когда я сравниваю два объекта 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 и listB, должен ли я получить true?
ListA.Equals(ListB)==true; //???
Решение
Попробуйте следующее
ListA.SequenceEquals(ListB);
SequenceEquals - это метод расширения, доступный на Enumerable
класс.Это доступно по умолчанию в проектах C # 3.5, поскольку поставляется вместе с System.Linq
Другие советы
Чтобы ответить на ваш вопрос, нет, вы не должны понимать правду. 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 .