我在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)
Ran*_*pho 21
呃......
ObservableCollection 确实有一个构造函数,它将获取IEnumerable<T>并IList<T>派生自IEnumerable<T>.
所以你可以"只是新人"
| 归档时间: |
|
| 查看次数: |
24227 次 |
| 最近记录: |