我有以下代码片段,我的问题是,如何使用简化的语法转换它,可能使用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。
谢谢, -Mike
答案 0 :(得分:6)
我建议使用ObservableCollection<T>
的{{3}}构造函数,它允许您从现有的IEnumerable<T>
构建集合。
在C#4中,你可以这样做:
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)));
由于IEnumerable<T>
界面的this,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)));
如果您经常这样做,请考虑在ToObservableCollection()
上编写IEnumerable<T>
扩展方法,让类型推断和/或方法链工作对您有利。
答案 1 :(得分:0)
在C#3 / .Net 3.5
中return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)).Cast<ISelectableItem>());