使用Enumerable.OfType<T>扩展方法实现非泛型集合的Linq查询
时间:2011-04-05 来源:辛勤的代码工
Linq查询运算符设计用于任何实现了IEnumerable<T>接口的类型。但System.Collections中传统的非泛型容器类未实现IEnumerable<T>接口,在这些非泛型容器上怎样执行Linq查询呢?
我们可以使用扩展方法Enumerable.OfType<T>()扩展方法将非泛型容器转换为IEnumerable<T>类型后,再执行查询。Enumerable.OfType<T>扩展方法的原型为:
public static IEnumerable<T> OfType<T>(this IEnumerable source);
示例代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace TestVar
{
class Program
{
static void Main(string[] args)
{
//创建整型数组
ArrayList intAry = new ArrayList { 1, 2, 3, 4, 5, 6 };
//将其转换为泛型容器
IEnumerable<int> intEnumable = intAry.OfType<int>();
//使用强类型立即获取查询结果
List<int> intList = (from x in intEnumable
where x % 2 == 0
select x).ToList();
//输出查询结果
foreach (int v in intList)
{
Console.Write(v.ToString() + " ");
}
Console.ReadKey();
}
}
}
相关阅读 更多 +