将IList中的元素添加到ObservableCollection中

我有一个ObservableCollection,我想将IList的内容设置为这个。 现在我可以创建一个新的集合实例..:

public ObservableCollection obs = new ObservableCollection(); public void Foo(IList list) { obs = new ObservableCollection(list); } 

但是,我怎样才能真正获取IList的内容并将其添加到我现有的ObservableCollection中? 我是否必须遍历所有元素,还是有更好的方法?

 public void Foo(IList list) { foreach (var elm in list) obs.Add(elm); } 

你可以做到

 public void Foo(IList list) { list.ToList().ForEach(obs.Add); } 

或作为一种延伸方法,

  public static void AddRange(this ObservableCollection collection, IEnumerable items) { items.ToList().ForEach(collection.Add); } 

如果您使用C#3 +来帮助您,可以编写自己的扩展方法。 此代码已经进行了一些基本测试,以确保它的工作原理:

 public static void AddRange(this ObservableCollection coll, IEnumerable items) { foreach (var item in items) { coll.Add(item); } } 

循环是唯一的方法,因为ObservableCollection没有AddRange等价物。

这是ObservableCollection的后代,用于添加消息高效的AddRange ,以及unit testing:

ObservableCollection不支持AddRange方法,所以除了INotifyCollectionChanging外,我还会收到添加的每个项目的通知?