foreach, instruction (C#)foreach, in (C# reference)

L’instruction foreach exécute une instruction ou un bloc d’instructions pour chaque élément d’une instance du type qui implémente l’interface System.Collections.IEnumerable ou System.Collections.Generic.IEnumerable<T>.The foreach statement executes a statement or a block of statements for each element in an instance of the type that implements the System.Collections.IEnumerable or System.Collections.Generic.IEnumerable<T> interface. L’instruction foreach n’est pas limitée à ces types et peut être appliquée à une instance de n’importe quel type répondant aux conditions suivantes :The foreach statement is not limited to those types and can be applied to an instance of any type that satisfies the following conditions:

  • comporte la méthode GetEnumerator sans paramètre publique dont le retour est de type classe, struct ou interface,has the public parameterless GetEnumerator method whose return type is either class, struct, or interface type,
  • le type de retour de la méthode GetEnumerator contient la propriété publique Current et la méthode sans paramètre publique MoveNext, dont le type de retour est Boolean.the return type of the GetEnumerator method has the public Current property and the public parameterless MoveNext method whose return type is Boolean.

À partir de C# 7.3, si la propriété Current de l’énumérateur retourne une valeur de retour de référence (ref TT est le type de l’élément de collection), vous pouvez déclarer la variable d’itération avec le modificateur ref ou ref readonly.Beginning with C# 7.3, if the enumerator's Current property returns a reference return value (ref T where T is the type of the collection element), you can declare the iteration variable with the ref or ref readonly modifier.

À tout moment dans le bloc d’instructions foreach, vous pouvez sortir de la boucle à l’aide de l’instruction break, ou passer à l’itération suivante de la boucle à l’aide de l’instruction continue.At any point within the foreach statement block, you can break out of the loop by using the break statement, or step to the next iteration in the loop by using the continue statement. Vous pouvez également quitter une boucle foreach en utilisant les instructions goto, return ou throw.You also can exit a foreach loop by the goto, return, or throw statements.

Si l’instruction foreach est appliquée à null, une NullReferenceException est levée.If the foreach statement is applied to null, a NullReferenceException is thrown. Si la collection source de l’instruction foreach est vide, le corps de la boucle foreach n’est pas exécuté et est ignoré.If the source collection of the foreach statement is empty, the body of the foreach loop is not executed and skipped.

ExemplesExamples

Notes

Les exemples C# de cet article s’exécutent dans l’exécuteur et le terrain de jeu du code inline Try.NET.The C# examples in this article run in the Try.NET inline code runner and playground. Sélectionnez le bouton Exécuter pour exécuter un exemple dans une fenêtre interactive.Select the Run button to run an example in an interactive window. Une fois que vous avez exécuté le code, vous pouvez le modifier et exécuter le code modifié en resélectionnant Exécuter.Once you execute the code, you can modify it and run the modified code by selecting Run again. La code modifié s’exécute dans la fenêtre interactive ou, si la compilation échoue, la fenêtre interactive affiche tous les messages d’erreur du compilateur C#.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

L’exemple suivant montre l’utilisation de l’instruction foreach avec une instance de type List<T> qui implémente l’interface IEnumerable<T> :The following example shows usage of the foreach statement with an instance of the List<T> type that implements the IEnumerable<T> interface:

var fibNumbers = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13 };
int count = 0;
foreach (int element in fibNumbers)
{
    count++;
    Console.WriteLine($"Element #{count}: {element}");
}
Console.WriteLine($"Number of elements: {count}");

L’exemple suivant utilise l’instruction foreach avec une instance de type System.Span<T> qui n’implémente aucune interface :The next example uses the foreach statement with an instance of the System.Span<T> type, which doesn't implement any interfaces:

public class IterateSpanExample
{
    public static void Main()
    {
        Span<int> numbers = new int[] { 3, 14, 15, 92, 6 };
        foreach (int number in numbers)
        {
            Console.Write($"{number} ");
        }
        Console.WriteLine();
    }
}

L’exemple suivant utilise une variable d’itération ref pour définir la valeur de chaque élément dans un tableau stackalloc.The following example uses a ref iteration variable to set the value of each item in a stackalloc array. La version ref readonly effectue une itération de la collection pour imprimer toutes les valeurs.The ref readonly version iterates the collection to print all the values. La déclaration readonly utilise une déclaration de variable locale implicite.The readonly declaration uses an implicit local variable declaration. Les déclarations de variable implicite peuvent être utilisées avec les déclarations ref ou ref readonly, tout comme les déclarations de variable explicitement typée.Implicit variable declarations can be used with either ref or ref readonly declarations, as can explicitly typed variable declarations.

public class ForeachRefExample
{
    public static void Main()
    {
        Span<int> storage = stackalloc int[10];
        int num = 0;
        foreach (ref int item in storage)
        {
            item = num++;
        }

        foreach (ref readonly var item in storage)
        {
            Console.Write($"{item} ");
        }
        // Output:
        // 0 1 2 3 4 5 6 7 8 9
    }
}

spécification du langage C#C# language specification

Pour plus d’informations, voir la section Instruction foreach de la spécification du langage C#.For more information, see The foreach statement section of the C# language specification.

Voir aussiSee also