Enumerable.Cast<TResult>(IEnumerable) Metoda

Definicja

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

IEnumerable<TResult>

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)

Dotyczy

Zobacz też