Enumerable.Cast<TResult>(IEnumerable) Méthode

Définition

Effectue un cast des éléments d'un IEnumerable vers le type spécifié.

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)

Paramètres de type

TResult

Type pour lequel effectuer un cast pour les éléments de source.

Paramètres

source
IEnumerable

IEnumerable les éléments à être castés en type TResult.

Retours

IEnumerable<TResult>

IEnumerable<T> qui contient chaque élément de la séquence source casté vers le type spécifié.

Exceptions

source a la valeur null.

Impossible de caster un élément de la séquence en type TResult.

Exemples

L’exemple de code suivant montre comment utiliser Cast<TResult>(IEnumerable) pour activer l’utilisation des opérateurs de requête standard sur un 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

Remarques

Cette méthode est implémentée à l’aide de l’exécution différée. La valeur de retour immédiat est un objet qui stocke toutes les informations requises pour effectuer l’action. La requête représentée par cette méthode n’est pas exécutée tant que l’objet n’est pas énuméré en appelant directement sa GetEnumerator méthode ou en l’utilisant foreach dans Visual C# ou For Each dans Visual Basic.

La Cast<TResult>(IEnumerable) méthode permet aux opérateurs de requête standard d’être appelés sur des collections non génériques en fournissant les informations de type nécessaires. Par exemple, n’implémente IEnumerable<T>pas, ArrayList mais en appelant Cast<TResult>(IEnumerable) l’objetArrayList, les opérateurs de requête standard peuvent ensuite être utilisés pour interroger la séquence.

Si un élément ne peut pas être converti en type TResult, cette méthode lève un InvalidCastException.

La séquence source de cette méthode est IEnumerable, ce qui signifie que les éléments ont le type statique de compilation de object. Les seules conversions de type effectuées par cette méthode sont des conversions de référence et des conversions d’unboxing. Le type d’exécution des éléments de la collection doit correspondre au type cible, ou dans le cas des types valeur, le type d’exécution d’éléments doit être le résultat d’une conversion boxing du type cible. Les autres types de conversion, tels que ceux entre différents types numériques, ne sont pas autorisés.

Pour obtenir uniquement les éléments qui peuvent être convertis en type TResult, utilisez la OfType méthode au lieu de Cast<TResult>(IEnumerable).

Dans une expression de requête, une variable d’itération typée explicitement se traduit par un appel de Cast<TResult>(IEnumerable). Cet exemple montre la syntaxe d’une variable de plage typée explicitement.

from int i in objects
From i As Integer In objects

Utilisez la select clause d’une requête pour effectuer d’autres types de conversion, comme les conversions numériques implicites. L’exemple suivant utilise à la fois la Cast méthode et une select instruction pour convertir une séquence d’entiers boxés en séquence de doubles.

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)

S’applique à

Voir aussi