System.Collections.Generic.List 的等于方法……?

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

public class MyList : List {}

我已经覆盖了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。 这将validation所有元素是否相同且顺序相同。 如果订单可能不同,您可以先对列表进行排序。

 public class MyList : List { public override bool Equals(object obj) { if (obj == null) return false; MyList list = obj as MyList; 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; } }