Вопрос

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

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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top