Partage via


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 nécessaires à l’exécution de 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é soit en appelant directement sa GetEnumerator méthode, soit en utilisant foreach en C# ou For Each en 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, ArrayList n’implémente IEnumerable<T>pas , mais en appelant Cast<TResult>(IEnumerable) sur l’objet ArrayList , 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 au moment de la compilation de object. Les seules conversions de type effectuées par cette méthode sont les conversions de référence et les 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 des é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 explicitement typée se traduit par un appel de Cast<TResult>(IEnumerable). Cet exemple montre la syntaxe d’une variable de plage explicitement typée.

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 encadré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