Добавить элементы из IList в ObservableCollection - PullRequest
22 голосов
/ 02 февраля 2010

У меня есть ObservableCollection, и я бы хотел установить содержание IList на это. Теперь я могу просто создать новый экземпляр коллекции ..:

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

Но как я могу взять содержимое IList и добавить его в мою существующую коллекцию ObservableCollection? Нужно ли перебирать все элементы или есть лучший способ?

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

Ответы [ 4 ]

50 голосов
/ 02 февраля 2010

Вы могли бы сделать

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

или как метод расширения,

    public static void AddRange<T>(this ObservableCollection<T> collection, IEnumerable<T> items)
    {
        items.ToList().ForEach(collection.Add);
    }    
9 голосов
/ 02 февраля 2010

Вы можете написать свой собственный метод расширения, если вы используете C # 3 +, чтобы помочь вам в этом.Этот код прошел некоторое базовое тестирование, чтобы убедиться, что он работает:

public static void AddRange<T>(this ObservableCollection<T> coll, IEnumerable<T> items)
{
    foreach (var item in items)
    {
        coll.Add(item);
    }
}
1 голос
/ 02 февраля 2010

Цикл является единственным способом, так как ObservableCollection.

нет эквивалента AddRange.
0 голосов
/ 17 октября 2012
...