Прочитать на английском

Поделиться через


Enumerable.Cast<TResult>(IEnumerable) Метод

Определение

Приводит элементы объекта IEnumerable к заданному типу.

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

Параметры типа

TResult

Тип, в который приводятся элементы параметра source.

Параметры

source
IEnumerable

IEnumerable, содержащий элементы, которые можно привести к TResult.

Возвращаемое значение

IEnumerable<TResult>

Объект IEnumerable<T>, который содержит все элементы исходной последовательности, приведенные в заданный тип.

Исключения

source имеет значение null.

Элемент последовательности не может быть приведен к типу 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 метода напрямую, либо с помощью foreach в C# или For Each в Visual Basic.

Метод Cast<TResult>(IEnumerable) позволяет вызывать стандартные операторы запросов в неуниверсических коллекциях, предоставляя необходимые сведения о типе. Например, ArrayList не реализует IEnumerable<T>, но путем вызова Cast<TResult>(IEnumerable)ArrayList в объекте стандартные операторы запроса можно использовать для запроса последовательности.

Если элемент не может быть преобразован в тип TResult, этот метод вызывает исключение InvalidCastException.

Исходной последовательностью для этого метода является IEnumerable, что означает, что элементы имеют статический тип времени компиляции object. Единственными преобразованиями типов, выполняемыми этим методом, являются преобразования ссылок и преобразования распаковки. Тип среды выполнения элементов в коллекции должен соответствовать целевому типу, или в случае с типами значений тип среды выполнения элементов должен быть результатом упаковавого преобразования целевого типа. Другие типы преобразования, например между разными числовыми типами, не допускаются.

Чтобы получить только те элементы, которые можно преобразовать в тип TResult, используйте OfType метод вместо Cast<TResult>(IEnumerable).

В выражении запроса явно типизированные переменные итерации преобразуются в вызов Cast<TResult>(IEnumerable). В этом примере показан синтаксис для явно типизированной переменной диапазона.

C#
from int i in objects

select Используйте предложение запроса для выполнения других типов преобразования, таких как неявные числовые преобразования. В следующем примере метод и select оператор используются Cast для преобразования последовательности упакованных целых чисел в последовательность двойников.

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

См. также раздел