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

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)

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

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