Как преобразовать список (Of T) в ObservableCollection (Of T) в VB.NET?

Есть ли способ сделать это без итерации по списку и добавления элементов в ObservableCollection?


person Rob Sobers    schedule 28.10.2008    source источник
comment
См. Соответствующий вопрос: stackoverflow.com/questions/731626/   -  person gideon    schedule 11.02.2011


Ответы (5)


Нет, нет возможности напрямую преобразовать список в наблюдаемую коллекцию. Вы должны добавить каждый предмет в коллекцию. Однако ниже приведен ярлык, позволяющий фреймворку перечислять значения и добавлять их за вас.

Dim list as new List(of string)
...some stuff to fill the list...
Dim observable as new ObservableCollection(of string)(list)
person Nescio    schedule 28.10.2008

Я опаздываю, но хочу поделиться этой интересной частью преобразования списка в ObservableCollection, если вам нужен цикл:

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> coll)
{
    var c = new ObservableCollection<T>();
    foreach (var e in coll) c.Add(e);
    return c;
}

Вы можете передать коллекцию конструктору ObservableCollection:

List<Product> myProds = ......
ObservableCollection<Product> oc = new ObservableCollection<Product>(myProds);

Теперь вам нужно перевести их на VB.NET :)

person Junior Mayhé    schedule 25.08.2009
comment
Это C #, а не VB.NET, но +1 в любом случае для решения этой проблемы для любого IEnumerable (а также за опоздание!) - person MarkJ; 25.08.2009
comment
Классная шутка! Это настоящий тонкий юмор !! - person RredCat; 28.05.2010

чтобы прояснить, что говорит Джуниор (с добавленным примером, если вы используете LINQ, который возвращает IEnumerable):

//Applications is an Observable Collection of Application in this example
List<Application> filteredApplications = 
      (Applications.Where( i => i.someBooleanDetail )).ToList();
Applications = new ObservableCollection<Application>( filteredApplications );
person Jordan    schedule 04.03.2011

Несмотря на то, что я опаздываю, я хочу поделиться быстрым улучшением ответа Junior: позвольте разработчику определить функция конвертера, используемая для преобразования наблюдаемых объектов коллекции из исходной коллекции в целевую.

Как следующее:

public static ObservableCollection<TDest> ToObservableCollection<TDest, TSource>(this IEnumerable<TSource> coll, Func<TSource, TDest> converter)
    {
        var c = new ObservableCollection<TDest>();
        foreach (var e in coll)
        {
            c.Add(converter(e));
        }
        return c;
    }
person trix    schedule 30.01.2014

person    schedule
comment
пожалуйста, поместите сюда описание вашего ответа. - person Bhavesh Patadiya; 25.12.2012