Enumerable.Cast<TResult> 方法

IEnumerable 的元素强制转换为指定的类型。            

public static IEnumerable<TResult> Cast<TResult>(
this IEnumerable source
)

类型参数

TResult

source 中的元素要强制转换成的类型。

参数

source

类型:System.Collections.IEnumerable 包含要转换成类型 TResult 的元素的 IEnumerable

返回值

类型:System.Collections.Generic.IEnumerable<TResult> 一个 IEnumerable<T>,包含强制转换为指定类型的源序列的每个元素。

 

使用说明

在 Visual Basic 和 C# 中,可以在 IEnumerable 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时,请省略第一个参数。有关详细信息,请参阅扩展方法 (Visual Basic)扩展方法(C# 编程指南)

备注


 

此方法通过使用延迟执行实现。  即时返回值为一个对象,该对象存储执行操作所需的所有信息。  只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。 

Cast<TResult>(IEnumerable)   方法通过提供必要的类型信息,可在非泛型集合上调用标准查询运算符。  例如,ArrayList 并不实现 IEnumerable<T>,但通过调用 ArrayList 对象上的 Cast<TResult>(IEnumerable),就可以使用标准查询运算符查询该序列。 

如果元素无法强制转换为 TResult 类型,则此方法将引发异常。  若要只获取可以强制转换为 TResult 类型的元素,请使用 OfType<TResult> 方法,而不是 Cast<TResult>(IEnumerable)。 

在查询表达式中,显式类型迭代变量会转换为 Cast<TResult>(IEnumerable) 的一个调用。  此示例演示显式类型范围变量的语法。 

from int i in objects

 


下面的代码示例演示如何使用 Cast<TResult>(IEnumerable) 在 ArrayList 上启用标准查询运算符。

System.Collections.ArrayList fruits = new System.Collections.ArrayList();
fruits.Add("mango");
fruits.Add("apple");
fruits.Add("lemon");

IEnumerable<string> query =
    fruits.Cast<string>().OrderBy(fruit => fruit).Select(fruit => fruit);

// The following code, without the cast, doesn't compile.
//IEnumerable<string> query1 =
//    fruits.OrderBy(fruit => fruit).Select(fruit => fruit);

foreach (string fruit in query)
{
    Console.WriteLine(fruit);
}

// This code produces the following output: 
//
// apple 
// lemon
// mango

 

posted @ 2015-07-05 23:06  hainix  阅读(684)  评论(0)    收藏  举报