1、Cast操作符
Cast
操作符用于将一个类型为IEnumerable的集合对象转换为IEnumerable<T>
类型的集合对象。也就是非泛型集合转成泛型集合,因为在Linq to OBJECT中,绝大部分操作符都是针对IEnumerable<T>
类型进行的扩展方法。因此对非泛型集合并不适用。
例如,
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);
IEnumerable<int> IEInt = al.Cast<int>(); //非泛型转泛型
foreach (var i in IEInt)
{
Console.WriteLine(i);
}
Console.ReadKey();
}
}
}
2、OfType操作符
OfType
操作符与Cast操作符类似,用于将类型为IEnumerable
的集合对象转换为IEnumerable<T>
类型的集合对象。不同的是,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");
//IEnumerable<int> IECast = al.Cast<int>(); //抛出异常
//foreach (var i in IECast)
//{
// Console.WriteLine(i);
//}
IEnumerable<int> IEOfType = al.OfType<int>();
foreach (int i in IEOfType)
{
Console.WriteLine(i); //输出 1 2 其中转换不了的a则不转换
}
Console.ReadKey();
}
}
}