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