Itérateurs (Guide de programmation C#)
Un itérateur est une méthode, un accesseur get ou un opérateur qui exécute une itération personnalisée sur un tableau ou une classe de collection à l'aide du mot clé yield. L'instruction return yield provoque le retour immédiat d'un élément de la séquence source à l'appelant avant l'accès à l'élément suivant de la séquence source. Bien que vous écriviez un itérateur comme une méthode, le compilateur le traduit en une classe imbriquée qui est, en fait, un ordinateur d'état. Cette classe effectue le suivi de la position de l'itérateur tant que la boucle foreach sur le code client se poursuit.
Notes
Pour consulter l'action du compilateur en arrière-plan, utilisez l'outil ILDASM.exe pour afficher le code IL (Intermediate Language) généré pour une méthode d'itérateur.
Un itérateur est appelé à partir de code client à l'aide d'une instruction foreach. Par exemple, vous pouvez créer un itérateur pour une classe qui retourne les éléments dans l'ordre inverse, ou qui exécute une opération sur chaque élément avant qu'il ne soit retourné par l'itérateur. Lorsque vous créez un itérateur pour votre classe ou struct, vous n'avez pas à implémenter l'ensemble de l'interface IEnumerator. Lorsque le compilateur détecte votre itérateur, il génère automatiquement les méthodes Current, MoveNext et Dispose de l'interface IEnumerator ou IEnumerator<T>.
Vue d'ensemble des itérateurs
Un itérateur est une section de code qui retourne une séquence ordonnée de valeurs du même type.
Un itérateur peut être utilisé comme corps d'une méthode, d'un opérateur ou d'un accesseur get.
Le code d'itérateur utilise l'instruction yield return pour retourner chaque élément un à un. yield break termine l'itération.
Plusieurs itérateurs peuvent être implémentés sur une classe. Chaque itérateur doit avoir un nom unique, comme n'importe quel membre de classe et peut être appelé par le code client dans une instruction foreach comme suit : foreach(int x in SampleClass.Iterator2){}.
Le type de retour d'un itérateur doit être IEnumerable, IEnumerator, IEnumerable<T> ou IEnumerator<T>.
Les itérateurs sont la base du comportement d'exécution différée dans les requêtes LINQ.
Le mot clé yield est utilisé pour spécifier la valeur ou les valeurs qui sont retournées. Lorsque l'instruction yield return est atteinte, l'emplacement actuel est stocké. L'exécution redémarrera à partir de cet emplacement la prochaine fois que l'itérateur sera appelé.
Les itérateurs sont particulièrement utiles avec les classes de collection, offrant un moyen pratique d'itérer des structures de données complexes comme les arbres binaires.
Rubriques connexes
Pour plus d'informations :
Comment : créer un bloc itérateur pour une liste d'entiers (Guide de programmation C#)
Comment : créer un bloc itérateur pour une liste générique (Guide de programmation C#)
Exemple
Dans cet exemple, la classe DaysOfTheWeek est une classe de collection simple qui stocke les jours de la semaine sous la forme de chaînes. Après chaque itération d'une boucle foreach, la chaîne suivante de la collection est retournée.
public class DaysOfTheWeek : System.Collections.IEnumerable
{
string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };
public System.Collections.IEnumerator GetEnumerator()
{
for (int i = 0; i < days.Length; i++)
{
yield return days[i];
}
}
}
class TestDaysOfTheWeek
{
static void Main()
{
// Create an instance of the collection class
DaysOfTheWeek week = new DaysOfTheWeek();
// Iterate with foreach
foreach (string day in week)
{
System.Console.Write(day + " ");
}
}
}
// Output: Sun Mon Tue Wed Thr Fri Sat
Spécification du langage C#
Pour plus d'informations, consultez la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.
Voir aussi
Référence
Génériques (guide de programmation C#)