Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

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.

RemarqueRemarque

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>.

  • 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.

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


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.

Ajouts de la communauté

AJOUTER
Afficher: