Ответ 1
Вы можете использовать SequenceEqual метод linq в списке, так как ваш список реализует IEnumerable. Это подтвердит, что все элементы одинаковы и в одном порядке. Если порядок может отличаться, вы можете сначала отсортировать списки.
Я создаю класс, который происходит из списка...
public class MyList : List<MyListItem> {}
Я переопределил Equals of MyListItem...
public override bool Equals(object obj)
{
MyListItem li = obj as MyListItem;
return (ID == li.ID); // ID is a property of MyListItem
}
Я хотел бы иметь метод Equals в объекте MyList, который будет сравнивать каждый элемент в списке, вызывая Equals() для каждого объекта MyListItem.
Было бы здорово просто позвонить...
MyList l1 = new MyList() { new MyListItem(1), new MyListItem(2) };
MyList l2 = new MyList() { new MyListItem(1), new MyListItem(2) };
if (l1 == l2)
{
...
}
... и сравните список, сделанный по значению.
Какой лучший способ...?
Вы можете использовать SequenceEqual метод linq в списке, так как ваш список реализует IEnumerable. Это подтвердит, что все элементы одинаковы и в одном порядке. Если порядок может отличаться, вы можете сначала отсортировать списки.
public class MyList<T> : List<T>
{
public override bool Equals(object obj)
{
if (obj == null)
return false;
MyList<T> list = obj as MyList<T>;
if (list == null)
return false;
if (list.Count != this.Count)
return false;
bool same = true;
this.ForEach(thisItem =>
{
if (same)
{
same = (null != list.FirstOrDefault(item => item.Equals(thisItem)));
}
});
return same;
}
}