Enumerable.Cast<TResult>(IEnumerable) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Rzutuje elementy elementu IEnumerable do określonego typu.
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)
Parametry typu
- TResult
Typ rzutowania elementów source
do.
Parametry
- source
- IEnumerable
Element IEnumerable zawierający elementy do rzutowania do typu TResult
.
Zwraca
Element IEnumerable<T> zawierający każdy element rzutowania sekwencji źródłowej na określony typ.
Wyjątki
source
to null
.
Nie można rzutować elementu w sekwencji, aby wpisać TResult
.
Przykłady
W poniższym przykładzie kodu pokazano, jak użyć Cast<TResult>(IEnumerable) polecenia w celu włączenia używania standardowych operatorów zapytań na obiekcie 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
Uwagi
Ta metoda jest implementowana za pomocą odroczonego wykonania. Bezpośrednio zwracana wartość jest obiektem, który przechowuje wszystkie informacje wymagane do wykonania akcji. Zapytanie reprezentowane przez tę metodę nie jest wykonywane, dopóki obiekt nie zostanie wyliczony, wywołując metodę GetEnumerator
bezpośrednio lub używając w foreach
języku C# lub For Each
w Visual Basic.
Metoda Cast<TResult>(IEnumerable) umożliwia wywoływanie standardowych operatorów zapytań w kolekcjach innych niż ogólne przez podanie niezbędnych informacji o typie. Na przykład ArrayList nie implementuje elementu IEnumerable<T>, ale wywołując Cast<TResult>(IEnumerable)ArrayList obiekt, standardowe operatory zapytań mogą następnie służyć do wykonywania zapytań względem sekwencji.
Jeśli nie można przekonwertować elementu na typ TResult
, ta metoda zgłasza błąd InvalidCastException.
Sekwencja źródłowa dla tej metody to IEnumerable, co oznacza, że elementy mają typ statyczny czasu kompilacji .object
Jedyną konwersją typów wykonywaną przez tę metodę są konwersje odwołań i konwersje rozpakłania. Typ środowiska uruchomieniowego elementów w kolekcji musi być zgodny z typem docelowym lub w przypadku typów wartości typ środowiska uruchomieniowego elementów musi być wynikiem konwersji boksu typu docelowego. Inne typy konwersji, takie jak te między różnymi typami liczbowym, są niedozwolone.
Aby uzyskać tylko te elementy, które można przekonwertować na typ TResult
, użyj OfType metody zamiast Cast<TResult>(IEnumerable).
W wyrażeniu zapytania jawnie wpisana zmienna iteracji przekłada się na wywołanie Cast<TResult>(IEnumerable). W tym przykładzie przedstawiono składnię jawnie wpisanej zmiennej zakresu.
from int i in objects
From i As Integer In objects
select
Użyj klauzuli zapytania, aby wykonać inne typy konwersji, takie jak niejawne konwersje liczbowe. W poniższym przykładzie użyto metody Cast
i select
instrukcji, aby przekonwertować sekwencję liczb całkowitych w polu na sekwencję podwojeń.
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)