使用LINQ按类类型进行过滤

9

我有一个列表,其中包含两种不同类型的对象,分别是折线和文本。

我想创建一个新的只包含折线的列表。

我的做法是:

var list2 = list1.SelectMany(x=> x.Type == PolyLine)

错误:'PolyLine'是一个类型,在给定的上下文中无效。

我该如何在这里过滤这些对象?


“PolyLine” 真的是 “x” 的类型吗?还是 “Type” 是某种枚举类型?如果是前者,只需使用 var list2 = list1.OfType<PolyLine>().ToList(); - René Vogt
2个回答

18

只需使用OfType<T>扩展方法:

var list2 = list1.OfType<PolyLine>().ToList();

这将选择 list1 中所有类型为 PolyLine 的元素。

ToList() 后,list2 的结果类型为 List<PolyLine>


2
你不需要使用 SelectMany,而是需要使用 Where 子句:
var result = list1.Where(x => x is PolyLine);

使用is运算符获取正确的类型。

可以进一步简化此操作,使用OfType扩展方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接