IList <T>到ObservableCollection <T>

Ste*_*ard 16 c# silverlight

我在Silverlight应用程序中有一个方法,当前返回一个IList,我想找到最简单的方法将其转换为一个ObservableCollection:

public IList<SomeType> GetIlist()
{
   //Process some stuff and return an IList<SomeType>;
}

public void ConsumeIlist()
{
   //SomeCollection is defined in the class as an ObservableCollection

   //Option 1
   //Doesn't work - SomeCollection is NULL 
   SomeCollection = GetIlist() as ObservableCollection

   //Option 2
   //Works, but feels less clean than a variation of the above
   IList<SomeType> myList = GetIlist
   foreach (SomeType currentItem in myList)
   {
      SomeCollection.Add(currentEntry);
   }
}
Run Code Online (Sandbox Code Playgroud)

ObservableCollection没有一个构造函数,它将IList或IEnumerable作为参数,所以我不能简单地新建一个.是否有一种替代方案看起来更像是我缺少的选项1,或者我只是在这里太挑剔而且选项2确实是一个合理的选择.

此外,如果选项2是唯一真正的选项,是否有理由在IEnurerable上使用IList,如果我真正要做的就是迭代返回值并将其添加到其他类型的集合中?

提前致谢

Jar*_*Par 30

你可以编写一个快速而又脏的扩展方法来简化它

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> enumerable) {
  var col = new ObservableCollection<T>();
  foreach ( var cur in enumerable ) {
    col.Add(cur);
  }
  return col;
}
Run Code Online (Sandbox Code Playgroud)

现在你可以写

return GetIlist().ToObservableCollection();
Run Code Online (Sandbox Code Playgroud)

  • 我考虑过这一点,也许应该这么说.大多数情况下,我想确保没有什么东西可以让我失踪. (2认同)

Ran*_*pho 21

呃......

ObservableCollection 确实有一个构造函数,它将获取IEnumerable<T>IList<T>派生自IEnumerable<T>.

所以你可以"只是新人"