【问题标题】:linq filtering by class typelinq 按类类型过滤
【发布时间】:2019-06-03 04:11:27
【问题描述】:

我有一个列表,其中包含 2 种不同类型的对象,即折线和文本。 我只想创建一个新的折线列表。

我所做的是;

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

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

如何在此处过滤这些对象?

【问题讨论】:

  • PolyLine 真的是 x 的类型还是 Type 某种枚举?在第一种情况下,只需使用var list2 = list1.OfType<PolyLine>().ToList();

标签: c# list linq filtering


【解决方案1】:

只需使用OfType<T> 扩展名:

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

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

在ToList() 之后,list2 的结果类型是List&lt;PolyLine&gt;。

【讨论】:

    【解决方案2】:

    您不需要SelectMany 而需要Where 子句:

    var result = list1.Where(x => x is PolyLine);
    

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

    这可以通过使用OfType 扩展方法进一步简化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-04
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多