Enumerable.Cast<TResult>(IEnumerable) 方法

定义

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

C#
public static System.Collections.Generic.IEnumerable<TResult> Cast<TResult> (this System.Collections.IEnumerable source);

类型参数

TResult

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

参数

source
IEnumerable

包含要转换成类型 TResult 的元素的 IEnumerable

返回

IEnumerable<TResult>

一个 IEnumerable<T>,其中包含已强制转换为指定类型的源序列的每个元素。

例外

sourcenull

序列中的元素不能强制转换为 TResult 类型。

示例

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

C#
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

注解

此方法通过使用延迟执行来实现。 即时返回值是一个对象,用于存储执行操作所需的所有信息。 在通过直接调用GetEnumerator其方法或通过在 C# For Eachforeach Visual Basic 中使用 来枚举对象之前,不会执行此方法表示的查询。

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

如果元素无法转换为类型 TResult,此方法将 InvalidCastException引发 。

此方法的源序列为 IEnumerable,这意味着元素的编译时静态类型为 object。 此方法执行的唯一类型转换是引用转换和取消装箱转换。 集合中元素的运行时类型必须与目标类型匹配,或者对于值类型,元素的运行时类型必须是目标类型的装箱转换的结果。 不允许使用其他转换类型,例如不同数值类型之间的转换类型。

若要仅获取可转换为 类型的 TResult元素,请使用 OfType 方法而不是 Cast<TResult>(IEnumerable)

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

C#
from int i in objects

select使用查询的 子句执行其他转换类型,例如隐式数值转换。 以下示例使用 Cast 方法和 select 语句将装箱整数序列转换为双精度序列。

C#
IEnumerable sequence = Enumerable.Range(0, 10);
var doubles = from int item in sequence
                select (double)item;

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

另请参阅