繁体   English   中英

System.Collections.Generic.List <T>的等于方法......?

[英]Equals method of System.Collections.Generic.List<T>…?

我正在创建一个派生自List的类...

public class MyList : List<MyListItem> {}

我已经覆盖了MyListItem的Equals ...

public override bool Equals(object obj)
{
    MyListItem li = obj as MyListItem;
    return (ID == li.ID);  // ID is a property of MyListItem
}

我想在MyList对象中也有一个Equals方法,它将比较列表中的每个项目,在每个MyListItem对象上调用Equals()。

简单地打电话会很好...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM