Равный метод System.Collections.Generic.List <T>...?

Я создаю класс, который происходит из списка...

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)
{
    ...
}

... и сравните список, сделанный по значению.

Какой лучший способ...?

Ответ 1

Вы можете использовать SequenceEqual метод linq в списке, так как ваш список реализует IEnumerable. Это подтвердит, что все элементы одинаковы и в одном порядке. Если порядок может отличаться, вы можете сначала отсортировать списки.

Ответ 2

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;
    }
}