我如何使用LINQ转换这个
本文关键字:转换 LINQ 何使用 | 更新日期: 2023-09-27 18:12:35
我有以下代码片段,我的问题是,我如何使用简化的语法,也许使用LINQ语法来转换它?
private ObservableCollection<ISelectableItem> GetSelectableUnits(ObservableCollection<Unit> units)
{
var selectableUnits = new ObservableCollection<ISelectableItem>();
units.ToList().ForEach(item=>selectableUnits.Add(new SelectableUnit(item)));
return selectableUnits;
}
注意:SelectableUnit实现了ISelectableItem。
谢谢,迈克
我建议使用ObservableCollection<T>
的这个构造函数,它允许您从现有的IEnumerable<T>
构造集合。
在c# 4中,你可以这样做:
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)));
由于IEnumerable<T>
界面的协方差,IEnumerable<SelectableUnit>
可以看作是IEnumerable<ISelectableItem>
。
在c# 3中,它不支持通用接口的变化,你可以这样做:
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)).Cast<ISelectableItem>());
(或)
return new ObservableCollection<ISelectableItem>
(units.Select(item => (ISelectableItem)new SelectableUnit(item)));
如果你经常做这类事情,考虑在IEnumerable<T>
上写一个ToObservableCollection()
扩展方法,让类型推理和/或方法链对你有利。
c# 3/.Net 3.5
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)).Cast<ISelectableItem>());