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

Определение

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

public:
generic <typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ Cast(System::Collections::IEnumerable ^ source);
public static System.Collections.Generic.IEnumerable<TResult> Cast<TResult> (this System.Collections.IEnumerable source);
static member Cast : System.Collections.IEnumerable -> seq<'Result>
<Extension()>
Public Function Cast(Of TResult) (source As IEnumerable) As IEnumerable(Of TResult)

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

TResult

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

Параметры

source
IEnumerable

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

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

IEnumerable<TResult>

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

Исключения

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

Элемент последовательности не может быть приведен к типу TResult.

Примеры

В следующем примере кода показано, как использовать 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
' Create an ArrayList and add items to it.
Dim fruits As New System.Collections.ArrayList()
fruits.Add("mango")
fruits.Add("apple")
fruits.Add("lemon")

' Call Cast(Of String) to cast the ArrayList elements to strings.
Dim query As IEnumerable(Of String) =
fruits.Cast(Of String)().OrderBy(Function(fruit) fruit).Select(Function(fruit) fruit)

'' The following code, without the cast, doesn't compile.
'Dim query As IEnumerable(Of String) = _
'    fruits.OrderBy(Function(fruit) fruit).Select(Function(fruit) fruit)

Dim output As New System.Text.StringBuilder
For Each fruit As String In query
    output.AppendLine(fruit)
Next

' Display the output.
Console.WriteLine(output.ToString())

' 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). В этом примере показан синтаксис для явно типизированной переменной диапазона.

from int i in objects
From i As Integer In objects

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

IEnumerable sequence = Enumerable.Range(0, 10);
var doubles = from int item in sequence
                select (double)item;
Dim sequence As IEnumerable = Enumerable.Range(0, 10)
Dim doubles = From item As Integer In sequence
                Select CType(item, Double)

Применяется к

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