2010-03-11 6 views
3

У меня есть класс с именемСравнивая два списка <MyClass> в C#

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. 

Когда я иду сравнить lišta и LISTB, я должен получить это?

ListA.Equals(ListB)==true; //??? 

ответ

7

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

ListA.SequenceEquals(ListB); 

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

0

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