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 Visual 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)

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

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