gpt4 book ai didi

c# - 如何使用 LINQ 进行转换?

转载 作者:行者123 更新时间:2023-12-02 19:36:53 26 4
gpt4 key购买 nike

我有以下代码片段,我的问题是,如何使用简化语法(也许使用 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。

谢谢,-迈克

最佳答案

我建议使用this ObservableCollection<T> 的构造函数,它允许您从现有的 IEnumerable<T> 构建集合。 .

在 C# 4 中,您可以执行以下操作:

return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)));

因为 covariance IEnumerable<T>的接口(interface),一个IEnumerable<SelectableUnit>可以看作 IEnumerable<ISelectableItem> .

在不支持通用接口(interface)变化的 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> 上的扩展方法让类型推断和/或方法链接对您有利。

关于c# - 如何使用 LINQ 进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7929777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com