我有以下代码段,我的问题是,如何使用简化的语法(也许使用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>
的this构造函数,该构造函数使您可以从现有的IEnumerable<T>
构造集合。
在C#4中,您可以执行以下操作:
return new ObservableCollection<ISelectableItem>
(units.Select(item => new SelectableUnit(item)));
由于IEnumerable<T>
接口的covariance,可以将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>
扩展方法,以使类型推断和/或方法链接对您有利。
在pom中,我有两个配置文件。测试1测试2现在,我希望根据激活的配置文件更改战争名称。预期结果激活test1配置文件后,战争名称应为prefix-test1.war。激活test1和test2时,战争名称应为prefix-test1-test2.war。如果没有激活任何配置文件,则战争名称应为prefix.war。我的POM文件....<?xml ve…
将对象转换为List <object> - c#我看过类似的问题,但没有什么合适的。我有一个碰巧包含列表的对象。我想把它变成我可以列举的东西。例如:object listObject; // contains a List<Something> List<object> list; list = listObject as List<object>; // list c…
Java中的“ <<”运算符 - java最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…
合并List <T>和List <Optional <T >> - java鉴于: List<Integer> integers = new ArrayList<>(Arrays.asList( 10, 12 )); List<Optional<Integer>> optionalIntegers = Arrays.asList( Optional.of(5), Optional.em…
如何告诉Checker遗留方法将接受Nullable类型? - java考虑一下:@Nullable Object obj = null; Optional<Object> optional = Optional.ofNullable(obj); 这会失败,因为检查器框架假定ofNullable无法接受null值(毕竟,其参数未标记为@Nullable)。有没有办法告诉Checker-framework这个方法(或我…