Enumerable.Cast<TResult>(IEnumerable) Metoda

Definicja

Rzutuje elementy 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 w celu wpisania TResultelementu .

Zwraca

IEnumerable<TResult>

Element IEnumerable<T> zawierający każdy element rzutowania sekwencji źródłowej na określony typ.

Wyjątki

Parametr source ma wartość null.

Nie można rzutować elementu w sekwencji, aby wpisać TResult.

Przykłady

W poniższym przykładzie kodu pokazano, jak używać Cast<TResult>(IEnumerable) polecenia w celu umożliwienia korzystania ze 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 przy użyciu odroczonego wykonania. Natychmiastowa wartość zwracana to obiekt, który przechowuje wszystkie informacje wymagane do wykonania akcji. Zapytanie reprezentowane przez tę metodę nie jest wykonywane, dopóki obiekt nie zostanie wyliczony przez wywołanie metody GetEnumerator bezpośrednio lub przy użyciu foreach w języku C# lub For Each w Visual Basic.

Metoda Cast<TResult>(IEnumerable) umożliwia wywoływanie standardowych operatorów zapytań w kolekcjach niegenerycznych przez podanie niezbędnych informacji o typie. Na przykład ArrayList nie implementuje IEnumerable<T>metody , ale wywołując Cast<TResult>(IEnumerable) obiekt ArrayList , standardowe operatory zapytań mogą być następnie używane do wykonywania zapytań względem sekwencji.

Jeśli nie można przekonwertować elementu na typ TResult, ta metoda zgłasza wartość InvalidCastException.

Sekwencja źródłowa dla tej metody to IEnumerable, co oznacza, że elementy mają statyczny typ objectczasu kompilacji . Jedyną konwersją typów wykonywaną przez tę metodę są konwersje odwołań i konwersje rozpatłaniania. 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 pola typu docelowego. Inne typy konwersji, takie jak te między różnymi typami liczbowymi, 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 typowana zmienna iteracji przekłada się na wywołanie Cast<TResult>(IEnumerable)elementu . W tym przykładzie przedstawiono składnię jawnie typizowanej 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 Cast użyto metody i select instrukcji , aby przekonwertować sekwencję liczb całkowitych w polu na sekwencję podwójnych wartości.

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ż