Enumerable.Cast<TResult>(IEnumerable) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Přetypuje prvky IEnumerable na 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, na který se mají přetypovat prvky source .
Parametry
- source
- IEnumerable
Obsahuje IEnumerable prvky, které mají být přetypován na typ TResult.
Návraty
Obsahuje IEnumerable<T> 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 použití Cast<TResult>(IEnumerable) použití standardních operátorů dotazu na objektu 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 se nespustí, dokud objekt nevyčte buď voláním metody GetEnumerator přímo nebo pomocí foreach v jazyce C# nebo For Each v Visual Basic.
Metoda Cast<TResult>(IEnumerable) umožňuje, aby standardní operátory dotazu byly vyvolány v ne generických kolekcích zadáním potřebných informací o typu. Například ArrayList neimplementuje IEnumerable<T>, ale voláním Cast<TResult>(IEnumerable) objektu ArrayList lze standardní operátory dotazu pak použít 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 prvky mají statický typ objectkompilace . Jedinými převody typů, které provádí tato metoda, jsou převody odkazů a rozbalení převodů. Typ modulu runtime prvků v kolekci musí odpovídat cílovému typu nebo v případě typů hodnot musí být typ modulu runtime prvků výsledkem převodu boxingu 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 OfType místo Cast<TResult>(IEnumerable).
Ve výrazu dotazu se explicitně zadává proměnná iterace překládá na vyvolání Cast<TResult>(IEnumerable). Tento příklad ukazuje syntaxi explicitně zadané proměnné rozsahu.
from int i in objects
From i As Integer In objects
Klauzule select dotazu slouží k provádění jiných typů převodu, jako jsou implicitní číselné převody. Následující příklad používá metodu Castselect i příkaz k převodu posloupnosti krabicových celých čísel na sekvenci doubles.
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)