如何将IEnumerable转换为ObservableCollection?

Ken*_*hou 118 c#

如何转换IEnumerableObservableCollection

Sco*_*ain 189

根据MSDN

var myObservableCollection = new ObservableCollection<YourType>(myIEnumerable);
Run Code Online (Sandbox Code Playgroud)

这将生成当前IEnumerable的浅表副本,并将其转换为ObservableCollection.

  • @Rexxo使用构造函数执行它会稍快一些.内部[它使用`foreach`](http://referencesource.microsoft.com/System/compmod/system/collections/objectmodel/observablecollection.cs.html#cfaa9abd8b214ecb)将项目复制到内部集合,但是如果你做foreach并调用`Add` [它将通过`InsertItem`](http://referencesource.microsoft.com/System/compmod/system/collections/objectmodel/observablecollection.cs.html#767bf62bf4a3a7c1)在最初填充时会有很多额外的东西,这会使它稍微变慢. (4认同)

Eli*_*sha 69

  1. 如果你正在使用非泛型,IEnumerable你可以这样做:

    public ObservableCollection<object> Convert(IEnumerable original)
    {
        return new ObservableCollection<object>(original.Cast<object>());
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果你正在使用泛型,IEnumerable<T>你可以这样做:

    public ObservableCollection<T> Convert<T>(IEnumerable<T> original)
    {
        return new ObservableCollection<T>(original);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果你正在使用非泛型IEnumerable但知道元素的类型,你可以这样做:

    public ObservableCollection<T> Convert<T>(IEnumerable original)
    {
        return new ObservableCollection<T>(original.Cast<T>());
    }
    
    Run Code Online (Sandbox Code Playgroud)


mar*_*lde 28

为了使事情变得更简单,您可以创建一个Extension方法.

public static class Extensions
{
    public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> col)
    {
        return new ObservableCollection<T>(col);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在每个IEnumerable上调用该方法

var lst = new List<object>().ToObservableCollection();
Run Code Online (Sandbox Code Playgroud)

  • 对于一个很酷的问题的很酷的答案,我将其添加到固定答案中。 (2认同)