Teilen über


Enumerable.Cast<TResult>(IEnumerable) Methode

Definition

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

IEnumerable<TResult>

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 TResultkonvertiert 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 TResultkonvertiert 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)

Gilt für:

Weitere Informationen