2010-03-08 82 views
10

我创建一个从列表派生的类...System.Collections.Generic.List的等效方法<T> ...?

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

...并请有值完成的列表比较。

什么是最好的方法......?

回答

25

由于列表实现了IEnumerable,因此您可以在列表上使用SequenceEqual linq方法。这将验证所有元素是相同的并且以相同的顺序。如果订单可能不同,可以先列出清单。

0
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; 
    } 
} 
相关问题