c# - IList<T> 到 ObservableCollection<T>

标签 c# silverlight

我在当前返回 IList 的 Silverlight 应用程序中有一个方法,我想找到最干净的方法将其转换为 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);
   }
}

ObservableCollection 没有将 IList 或 IEnumerable 作为参数的构造函数,因此我无法简单地新建一个。是否有一个看起来更像我所缺少的选项 1 的替代方案,或者我在这里太挑剔了,而选项 2 确实是一个合理的选择。

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

提前致谢

最佳答案

您可以编写一个快速但肮脏的扩展方法以使其变得简单

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;
}

现在你可以写了

return GetIlist().ToObservableCollection();

关于c# - IList<T> 到 ObservableCollection<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/731626/

相关文章:

c# - 在非 UI 线程 Silverlight 5 浏览器应用程序中创建 UserControl

silverlight - 安装 Silverlight 是否需要本地管理员权限?

c# - SslStream.AuthenticateAsServer 挂起

c# - 密码字段的水印文本

wpf - 表达混合书籍?

silverlight - 如何禁用 Windows Phone 7 启动画面?

c# - Silverlight 访问本地计算机文件

c# - 以可持续的方式使用 azure 进行 transient 故障处理

c# - 在c#中创建dll文件

c# - 在 C# 中将 π 计算为 "infinite"二进制精度