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