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

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)

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

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