我们都知道,Linq能查询泛型集合,确切的说是:LINQ能实现查询泛型对象或者实现了IEnumerable。但是,很遗憾的是诸如ArrayList这样的非泛型集合并没有实现IEnumerable。那咋办呢?总不能把这么绚丽的Linq技术对非泛型关上大门把!~其实,方法还是有的。
场景还原:
定义一个car的类:
class Car { public int CurrentSpeed; public int MaxSpeed; public string PetName; }
对ArrayList 装载一些数据:
ArrayList cars = new ArrayList(); cars.Add(new Car { CurrentSpeed = 21, MaxSpeed = 2, PetName = "aa" }); cars.Add(new Car { CurrentSpeed = 212, MaxSpeed = 22, PetName = "aa1" });
如果强制使用Linq操作,会报错:
解决方法如下:
方法一。用Cast<T> 关键字
var myAllCars = cars.Cast<Car>(); var result = from c in myAllCars where c.MaxSpeed > 10 select c;
方法二。使用OfType<T>
var myAllCars = cars.OfType<Car>(); var result = from c in myAllCars where c.MaxSpeed > 10 select c;
OfType 除了上面转换非泛型之外,还有一个功能是刷选数据的功能。
这个很简单