Enumerable.Cast<TResult>(IEnumerable) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Wandelt die Elemente eines IEnumerable in den angegebenen Typ um
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)
Typparameter
- TResult
Der Typ, an den die Elemente von source
übergeben werden sollen.
Parameter
- source
- IEnumerable
Das IEnumerable, das die in Typ TResult
umzuwandelnden Elemente enthält.
Gibt zurück
Ein IEnumerable<T>, das jedes Element der Quellsequenz enthält, das in den angegebenen Typ umgewandelt wird
Ausnahmen
source
ist null
.
Ein Element in der Sequenz kann nicht in den Typ TResult
umgewandelt werden.
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie sie Cast<TResult>(IEnumerable) verwenden, um die Verwendung der Standardabfrageoperatoren für eine ArrayListzu aktivieren.
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
Hinweise
Diese Methode wird mithilfe der verzögerten Ausführung implementiert. Der sofortige Rückgabewert ist ein Objekt, das alle Informationen speichert, die zum Ausführen der Aktion erforderlich sind. Die von dieser Methode dargestellte Abfrage wird erst ausgeführt, wenn das Objekt entweder durch direktes Aufrufen der GetEnumerator
-Methode oder mithilfe foreach
von in C# oder For Each
in Visual Basic aufgezählt wird.
Mit Cast<TResult>(IEnumerable) der -Methode können die Standardabfrageoperatoren für nicht generische Auflistungen aufgerufen werden, indem die erforderlichen Typinformationen bereitgestellt werden. Implementiert IEnumerable<T>beispielsweise ArrayList nicht , aber durch Aufrufen Cast<TResult>(IEnumerable) des ArrayList -Objekts können dann die Standardabfrageoperatoren verwendet werden, um die Sequenz abzufragen.
Wenn ein Element nicht in den Typ TResult
konvertiert werden kann, löst diese Methode einen aus InvalidCastException.
Die Quellsequenz für diese Methode ist IEnumerable. Dies bedeutet, dass die Elemente den statischen Typ zur Kompilierzeit haben object
. Die einzigen Typkonvertierungen, die von dieser Methode ausgeführt werden, sind Verweiskonvertierungen und Unboxingkonvertierungen. Der Laufzeittyp der Elemente in der Auflistung muss mit dem Zieltyp übereinstimmen, oder im Fall von Werttypen muss der Laufzeittyp von Elementen das Ergebnis einer Boxingkonvertierung des Zieltyps sein. Andere Konvertierungstypen, z. B. zwischen verschiedenen numerischen Typen, sind nicht zulässig.
Um nur die Elemente abzurufen, die in den Typ TResult
konvertiert werden können, verwenden Sie die OfType -Methode anstelle von Cast<TResult>(IEnumerable).
In einem Abfrageausdruck wird eine explizit typisierte Iterationsvariable in einen Aufruf von Cast<TResult>(IEnumerable)übersetzt. Dieses Beispiel zeigt die Syntax für eine explizit typisierte Bereichsvariable.
from int i in objects
From i As Integer In objects
Verwenden Sie die select
-Klausel einer Abfrage, um andere Konvertierungstypen auszuführen, z. B. die impliziten numerischen Konvertierungen. Im folgenden Beispiel werden sowohl die Cast
-Methode als auch eine select
-Anweisung verwendet, um eine Sequenz von geschachtelten ganzen Zahlen in eine Sequenz von Doubles zu konvertieren.
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)