C# 我如何使用LINQ来转换这个?

C# 我如何使用LINQ来转换这个?,c#,linq,C#,Linq,我有下面的代码片段,我的问题是,如何使用简化的语法(可能使用LINQ语法)来转换它 private ObservableCollection<ISelectableItem> GetSelectableUnits(ObservableCollection<Unit> units) { var selectableUnits = new ObservableCollection<ISelectableItem>();

我有下面的代码片段,我的问题是,如何使用简化的语法(可能使用LINQ语法)来转换它

 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());