Linq to object 中我们经常可以很方便的查询多种集合比如List<T>泛型,主要的原因是他们都实现了System.Collections.Generic.IEnumerable<T>接口从而可以完成相关的查询操作但并非所有的类都实现了以上接口比如说System.Collections.ArrayList,那么通过以下三种方式可以解决。

一、OfType操作符
先看它的签名public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source)根据指定类型筛选IEnumerable的元素,当source为null返回ArgumentNullException

Linq之查询非泛型集合var q = cars.OfType<Car>().Where(c=>c.Doors==2);
Linq之查询非泛型集合


二、Cast强制转换
从Cast的签名就知道它可以返回IEnumerable<T> ,
public static IEnumerable<T> Cast<T>(this IEnumerable source)
但是也要注意,如果被转换的类型中不能被转为T的则会报Invalid-
CastException异常,如果是null的话则为NullReferenceException上面代码改写为:

Linq之查询非泛型集合var q = from c in cars.Cast<Car>
Linq之查询非泛型集合        
where c.Doors==2


三、明确的类型定义
定义from中的查询类型,如
Linq之查询非泛型集合Linq之查询非泛型集合Linq之查询非泛型集合
Linq之查询非泛型集合var q 
= from Car c in cars
Linq之查询非泛型集合        
where c.Doors==2


相关文章:

  • 2021-07-11
  • 2021-10-29
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-22
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2017-12-10
  • 2021-06-29
  • 2021-12-05
  • 2022-12-23
  • 2021-08-20
  • 2021-10-08
  • 2021-06-24
相关资源
相似解决方案