Sdílet prostřednictvím


Enumerable.Cast<TResult>(IEnumerable) Metoda

Definice

Přetypuje prvky objektu na IEnumerable zadaný typ.

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, do který chcete přetypovat prvky source .

Parametry

source
IEnumerable

Obsahuje IEnumerable prvky, které se mají přetypovat na typ TResult.

Návraty

IEnumerable<TResult>

Objekt IEnumerable<T> , který obsahuje každý prvek zdrojové sekvence přetypování na zadaný typ.

Výjimky

source je null.

Prvek v sekvenci nelze přetypovat na typ TResult.

Příklady

Následující příklad kódu ukazuje, jak povolit Cast<TResult>(IEnumerable) použití standardních operátorů dotazu na 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

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce C# nebo For Each v jazyce Visual Basic.

Metoda Cast<TResult>(IEnumerable) umožňuje vyvolání standardních operátorů dotazu v jiných než obecných kolekcích poskytnutím potřebných informací o typu. Například ArrayList neimplementuje IEnumerable<T>, ale voláním Cast<TResult>(IEnumerable)ArrayList na objekt lze pak použít standardní operátory dotazu k dotazování sekvence.

Pokud prvek nelze převést na typ TResult, tato metoda vyvolá InvalidCastException.

Zdrojová sekvence pro tuto metodu je IEnumerable, což znamená, že elementy mají statický typ objectkompilační doby . Jedinými převody typů, které tato metoda provádí, jsou převody odkazů a převody rozbalování. Typ modulu runtime elementů v kolekci musí odpovídat cílovému typu, nebo v případě hodnotových typů musí být typ modulu runtime prvků výsledkem krabicového převodu cílového typu. Jiné typy převodu, například mezi různými číselnými typy, nejsou povoleny.

Chcete-li získat pouze ty prvky, které lze převést na typ TResult, použijte metodu Cast<TResult>(IEnumerable)OfType místo .

Ve výrazu dotazu se proměnná iterace explicitně zadaného typu překládá na vyvolání Cast<TResult>(IEnumerable)příkazu . Tento příklad ukazuje syntaxi pro proměnnou explicitně zadaného rozsahu.

from int i in objects
From i As Integer In objects

Klauzuli select dotazu použijte k provádění jiných typů převodů, jako jsou implicitní číselné převody. Následující příklad používá metodu Cast i select příkaz k převodu posloupnosti celých čísel v rámečku na sekvenci dvojitých čísel.

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)

Platí pro

Viz také