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, in den die Elemente von source
Parameter
- source
- IEnumerable
Das IEnumerable Element, das die elemente enthält, die in den Typ umzuformen TResultsind.
Gibt zurück
Eine IEnumerable<T> , die jedes Element der Quellsequenz enthält, wird in den angegebenen Typ umgegossen.
Ausnahmen
source ist null.
Ein Element in der Sequenz kann nicht in die Eingabe TResultumgestellt werden.
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie Cast<TResult>(IEnumerable) Sie die Verwendung der Standardabfrageoperatoren für ein 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
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 durch diese Methode dargestellte Abfrage wird erst ausgeführt, wenn das Objekt aufgezählt wird, indem die GetEnumerator-Methode direkt oder mithilfe von foreach in C# oder For Each in Visual Basic aufgerufen 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 z. B. nicht ArrayList, IEnumerable<T> aber durch Aufrufen Cast<TResult>(IEnumerable) des ArrayList Objekts können die Standardabfrageoperatoren dann zum Abfragen der Sequenz verwendet werden.
Wenn ein Element nicht in den Typ TResultkonvertiert werden kann, löst diese Methode eine InvalidCastException.
Die Quellsequenz für diese Methode lautet IEnumerable, was bedeutet, dass die Elemente den statischen Kompilierungstyp aufweisen object. Die einzigen Typkonvertierungen, die von dieser Methode ausgeführt werden, sind Referenzkonvertierungen und Unboxing-Konvertierungen. 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 Boxumwandlung des Zieltyps sein. Andere Konvertierungstypen, z. B. zwischen verschiedenen numerischen Typen, sind nicht zulässig.
Um nur die Elemente abzurufen, die in Typ TResultkonvertiert werden können, verwenden Sie die OfType Methode anstelle von Cast<TResult>(IEnumerable).
In einem Abfrageausdruck wird eine explizit eingegebene Iterationsvariable in einen Aufruf von Cast<TResult>(IEnumerable). Dieses Beispiel zeigt die Syntax für eine explizit typierte 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 Abfolge von Box-Ganzzahlen in eine Sequenz von Doppelzahlen 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)