1、Cast操作符
Cast
操作符用于将一个类型为IEnumerable的集合对象转换为IEnumerable
类型的集合对象。也就是非泛型集合转成泛型集合,因为在Linq to OBJECT中,绝大部分操作符都是针对IEnumerable
类型进行的扩展方法。因此对非泛型集合并不适用。
例如,
using System;using System.Collections.Generic;using System.Collections;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication{ class Program { static void Main(string[] args) { ArrayList al = new ArrayList(); al.Add(1); al.Add(2); al.Add(3); IEnumerableIEInt = al.Cast (); //非泛型转泛型 foreach (var i in IEInt) { Console.WriteLine(i); } Console.ReadKey(); } }}
2、OfType操作符
OfType
操作符与Cast操作符类似,用于将类型为IEnumerable
的集合对象转换为IEnumerable
类型的集合对象。不同的是,Cast
操作符会视图将输入序列中的所有元素转换成类型为T
的对象,,如果有转换失败的元素存在Cast
操作符将抛出一个异常;而OfType
操作符仅会将能够成功转换的元素进行转换,并将这些结果添加到结果序列中去。与Cast
操作符相比,OfType
操作符更加安全。
例如,
using System;using System.Collections.Generic;using System.Collections;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication{ class Program { static void Main(string[] args) { ArrayList al = new ArrayList(); al.Add(1); al.Add(2); al.Add("a"); //IEnumerableIECast = al.Cast (); //抛出异常 //foreach (var i in IECast) //{ // Console.WriteLine(i); //} IEnumerable IEOfType = al.OfType (); foreach (int i in IEOfType) { Console.WriteLine(i); //输出 1 2 其中转换不了的a则不转换 } Console.ReadKey(); } }}