【问题标题】:How do I convert a List(Of T) to an ObservableCollection(Of T) in VB.NET?如何在 VB.NET 中将 List(Of T) 转换为 ObservableCollection(Of T)?
【发布时间】:2010-09-19 14:45:43
【问题描述】:

有没有办法做到这一点,而无需遍历 List 并将项目添加到 ObservableCollection?

【问题讨论】:

标签: vb.net collections list


【解决方案1】:

尽管我迟到了,但我想分享一个对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;
    }

【讨论】:

    【解决方案2】:

    澄清 Junior 在说什么(如果您使用返回 IEnumerable 的 LINQ,请添加一个示例):

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

    【讨论】:

      【解决方案3】:
      ObservableCollection<yourobjectname> result = new ObservableCollection<yourobjectname>(yourobjectlist);
      

      【讨论】:

      • 请在此处描述您的答案。
      【解决方案4】:
      //Create an observable collection TObservable.
      
      ObservableCollection (TObservable) =new ObservableCollection (TObservable)();
      
      //Convert List items(OldListItems) to collection
      
      OldListItems.ForEach(x => TObservable.Add(x));
      

      【讨论】:

        【解决方案5】:

        我迟到了,但如果你需要循环,我想分享这个有趣的片段,用于将列表转换为 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 :)

        【讨论】:

        • 那是 C#,不是 VB.NET,而是 +1 用于解决任何 IEnumerable 的问题(也用于迟到!)
        • 开个玩笑!这是真正微妙的幽默!
        【解决方案6】:

        不,没有办法直接将列表转换为可观察的集合。您必须将每个项目添加到集合中。但是,下面是允许框架枚举值并为您添加它们的快捷方式。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-30
          • 2011-04-03
          相关资源
          最近更新 更多