我正在创建一个派生自List ...
的类
public class MyList : List<MyListItem> {}
我已经覆盖了MyListItem的等号......
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)
{
...
}
...并按值完成列表的比较。
什么是最好的方式......?
答案 0 :(得分:26)
您可以在列表中使用SequenceEqual linq方法,因为您的列表实现了IEnumerable。这将验证所有元素是否相同且顺序相同。如果订单可能不同,您可以先对列表进行排序。
答案 1 :(得分:1)
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;
}
}