C# 我如何使用LINQ来转换这个?
我有下面的代码片段,我的问题是,如何使用简化的语法(可能使用LINQ语法)来转换它C# 我如何使用LINQ来转换这个?,c#,linq,C#,Linq,我有下面的代码片段,我的问题是,如何使用简化的语法(可能使用LINQ语法)来转换它 private ObservableCollection<ISelectableItem> GetSelectableUnits(ObservableCollection<Unit> units) { var selectableUnits = new ObservableCollection<ISelectableItem>();
private ObservableCollection<ISelectableItem> GetSelectableUnits(ObservableCollection<Unit> units)
{
var selectableUnits = new ObservableCollection<ISelectableItem>();
units.ToList().ForEach(item=>selectableUnits.Add(new SelectableUnit(item)));
return selectableUnits;
}
私有ObservableCollection GetSelectableUnits(ObservableCollection units)
{
var selectableUnits=新的ObservableCollection();
units.ToList().ForEach(item=>selectableUnits.Add(newselectableunit(item));
返回可选择的单位;
}
注意:SelectableUnit实现ISelectableItem
谢谢,
-Mike我建议使用ObservableCollection
的构造函数,它允许您从现有的IEnumerable
构造集合
在C#4中,您可以执行以下操作:
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)));
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)).Cast<ISelectableItem>());
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)).Cast<ISelectableItem>());
返回新的ObservableCollection
(units.Select(item=>newselectableunit(item));
由于IEnumerable
接口的作用,可以将IEnumerable
视为IEnumerable
在不支持通用接口差异的C#3中,您可以执行以下操作:
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)));
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)).Cast<ISelectableItem>());
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)).Cast<ISelectableItem>());
返回新的ObservableCollection
(units.Select(item=>newselectableunit(item)).Cast());
(或)
返回新的ObservableCollection
(units.Select(item=>(ISelectableItem)新建SelectableUnit(item));
如果你经常这样做,考虑写一个<代码> toStababCyLink()/Cuth.Exp-方法,在<代码> iQueLabe中让类型推断和/或方法链接对你有利。
< P>>C 3/.NET 3.5 < /P>返回新的ObservableCollection
(units.Select(item=>newselectableunit(item)).Cast());