Enumerable.Cast<TResult>(IEnumerable) Methode

Definitie

Cast de elementen van een IEnumerable naar het opgegeven type.

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)

Type parameters

TResult

Het type waarvan de elementen source moeten worden omgezet.

Parameters

source
IEnumerable

De IEnumerable elementen die moeten worden gecast om te typen TResult.

Retouren

IEnumerable<TResult>

Een IEnumerable<T> die elk element van de bronreekscast bevat naar het opgegeven type.

Uitzonderingen

source is null.

Een element in de reeks kan niet worden gecast om te typen TResult.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe Cast<TResult>(IEnumerable) u het gebruik van de standaardqueryoperators op een 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

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

Met Cast<TResult>(IEnumerable) de methode kunnen de standaardqueryoperators worden aangeroepen voor niet-algemene verzamelingen door de benodigde typegegevens op te geven. Implementeert bijvoorbeeld ArrayList niet IEnumerable<T>, maar door het aanroepen Cast<TResult>(IEnumerable) van het ArrayList object, kunnen de standaardqueryoperators vervolgens worden gebruikt om een query uit te voeren op de reeks.

Als een element niet kan worden geconverteerd naar type TResult, genereert deze methode een InvalidCastException.

De bronreeks voor deze methode is IEnumerable, wat betekent dat de elementen het statische type objectcompileertijd hebben. De enige typeconversies die door deze methode worden uitgevoerd, zijn verwijzingsconversies en het ongedaan maken van conversies. Het runtimetype van de elementen in de verzameling moet overeenkomen met het doeltype, of in het geval van waardetypen moet het runtimetype van elementen het resultaat zijn van een boksconversie van het doeltype. Andere conversietypen, zoals die tussen verschillende numerieke typen, zijn niet toegestaan.

Als u alleen de elementen wilt verkrijgen die naar type TResultkunnen worden geconverteerd, gebruikt u de OfType methode in plaats van Cast<TResult>(IEnumerable).

In een query-expressie wordt een expliciet getypte iteratievariabele omgezet in een aanroep van Cast<TResult>(IEnumerable). In dit voorbeeld ziet u de syntaxis voor een expliciet getypte bereikvariabele.

from int i in objects
From i As Integer In objects

Gebruik de select component van een query om andere conversietypen uit te voeren, zoals de impliciete numerieke conversies. In het volgende voorbeeld worden zowel de Cast methode als een select instructie gebruikt om een reeks vakken gehele getallen te converteren naar een reeks dubbele getallen.

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)

Van toepassing op

Zie ook