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 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
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 object
kompilač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)