foreach, in (Riferimenti per C#)foreach, in (C# reference)

L'istruzione foreach esegue un'istruzione o un blocco di istruzioni per ogni elemento in un'istanza del tipo che implementa l'interfaccia System.Collections.IEnumerable o 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'istruzione foreach non è limitata a questi tipi e può essere applicata a un'istanza di qualsiasi tipo che soddisfa le condizioni seguenti:The foreach statement is not limited to those types and can be applied to an instance of any type that satisfies the following conditions:

  • include il metodo GetEnumerator pubblico senza parametri con tipo restituito classe, struct o interfaccia,has the public parameterless GetEnumerator method whose return type is either class, struct, or interface type,
  • il tipo restituito del metodo GetEnumerator include la proprietà Current pubblica e il metodo MoveNext pubblico senza parametri con tipo restituito Boolean.the return type of the GetEnumerator method has the public Current property and the public parameterless MoveNext method whose return type is Boolean.

A partire da C# 7.3, se la proprietà Current dell'enumeratore restituisce un valore restituito di riferimento (ref T dove T è il tipo dell'elemento della raccolta), è possibile dichiarare la variabile di iterazione con il modificatore ref o 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.

In un punto qualsiasi all'interno del blocco dell'istruzione foreach è possibile uscire dal ciclo usando l'istruzione break o passare all'iterazione successiva nel ciclo con l'istruzione 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. Si può uscire da un ciclo foreach anche usando l'istruzione goto, return o throw.You also can exit a foreach loop by the goto, return, or throw statements.

Se l'istruzione foreach viene applicata a null, viene generata una NullReferenceException.If the foreach statement is applied to null, a NullReferenceException is thrown. Se la raccolta di origine dell'istruzione foreach è vuota, il corpo del ciclo foreach non viene eseguito e viene ignorato.If the source collection of the foreach statement is empty, the body of the foreach loop is not executed and skipped.

EsempiExamples

Nota

Gli esempi in C# in questo articolo vengono eseguiti nello strumento di esecuzione e playground per codice inline Try.NET.The C# examples in this article run in the Try.NET inline code runner and playground. Selezionare il pulsante Esegui per eseguire un esempio in una finestra interattiva.Select the Run button to run an example in an interactive window. Dopo aver eseguito il codice, è possibile modificarlo ed eseguire il codice modificato selezionando di nuovo Esegui.Once you execute the code, you can modify it and run the modified code by selecting Run again. Il codice modificato viene eseguito nella finestra interattiva o, se la compilazione non riesce, la finestra interattiva visualizza tutti i messaggi di errore del compilatore C#.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

L'esempio seguente mostra l'utilizzo dell'istruzione foreach con un'istanza del tipo List<T> che implementa l'interfaccia 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'esempio successivo usa l'istruzione foreach con un'istanza del tipo System.Span<T>, che non implementa alcuna interfaccia: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'esempio seguente usa una variabile di iterazione ref per impostare il valore di ogni elemento in una matrice di stackalloc.The following example uses a ref iteration variable to set the value of each item in a stackalloc array. La versione ref readonly esegue l'iterazione della raccolta per stampare tutti i valori.The ref readonly version iterates the collection to print all the values. La dichiarazione readonly usa una dichiarazione di variabile locale implicita.The readonly declaration uses an implicit local variable declaration. Le dichiarazioni di variabili implicite possono essere usate con le dichiarazioni ref o ref readonly, così come le dichiarazioni di variabili tipizzate.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
    }
}

Specifiche del linguaggio C#C# language specification

Per altre informazioni, vedere la sezione L'istruzione foreach della specifica del linguaggio C#.For more information, see The foreach statement section of the C# language specification.

Vedere ancheSee also