如何使用LINQ进行投射? - c#

我有以下代码段,我的问题是,如何使用简化的语法(也许使用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>扩展方法,以使类型推断和/或方法链接对您有利。

根据激活的Maven配置文件更新战争名称 - java

在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这个方法(或我…