将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外,我还会收到添加的每个项目的通知?