Enumerable.Cast<TResult>(IEnumerable) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Convertit les éléments d’un IEnumerable en 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 vers lequel effectuer un cast des éléments source .
Paramètres
- source
- IEnumerable
Qui IEnumerable contient les éléments à convertir en type TResult.
Retours
Qui IEnumerable<T> contient chaque élément du cast de séquence source vers le type spécifié.
Exceptions
source a la valeur null.
Un élément de la séquence ne peut pas être converti 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édiate 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 méthode GetEnumerator ou en utilisant foreach en 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 au moment de la 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 de types valeur, le type d’exécution des éléments doit être le résultat d’une conversion de boxing du type cible. D’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)