foreach, in (C#-Referenz)foreach, in (C# Reference)

Die Anweisung foreach führt eine Anweisung oder einen Block von Anweisungen für jedes Element in einer Instanz des Typs aus, der die Schnittstelle System.Collections.IEnumerable oder System.Collections.Generic.IEnumerable<T> implementiert.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. Die Anweisung foreach ist nicht auf diese Typen beschränkt und kann auf eine Instanz eines beliebigen Typs angewendet werden, der die folgenden Bedingungen erfüllt:The foreach statement is not limited to those types and can be applied to an instance of any type that satisfies the following conditions:

  • Er weist die öffentliche parameterlose Methode GetEnumerator auf, deren Rückgabetyp entweder Klasse, Struktur oder Schnittstellentyp ist.has the public parameterless GetEnumerator method whose return type is either class, struct, or interface type,
  • Der Rückgabetyp der Methode GetEnumerator weist die öffentliche Eigenschaft Current und die öffentliche parameterlose Methode MoveNext auf, deren Rückgabetyp Boolean ist.the return type of the GetEnumerator method has the public Current property and the public parameterless MoveNext method whose return type is Boolean.

Sie können die Schleife an jedem Punkt im foreach-Anweisungsblock mit der Anweisung break unterbrechen oder mit der Anweisung continue direkt zum nächsten Durchlauf der Schleife springen.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. Sie können eine foreach-Schleife auch mit den Anweisungen goto, return oder throw beenden.You also can exit a foreach loop by the goto, return, or throw statements.

BeispieleExamples

Hinweis

Die C#-Beispiele in diesem Artikel werden in der Inlinecodeausführung und dem Playground von Try.NET ausgeführt.The C# examples in this article run in the Try.NET inline code runner and playground. Klicken Sie auf die Schaltfläche Ausführen, um ein Beispiel in einem interaktiven Fenster auszuführen.Select the Run button to run an example in an interactive window. Nachdem Sie den Code ausgeführt haben, können Sie ihn ändern und den geänderten Code durch erneutes Anklicken der Schaltfläche Ausführen ausführen.Once you execute the code, you can modify it and run the modified code by selecting Run again. Der geänderte Code wird entweder im interaktiven Fenster ausgeführt, oder das interaktive Fenster zeigt alle C#-Compilerfehlermeldungen an, wenn die Kompilierung fehlschlägt.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

Das folgende Beispiel zeigt die Syntax der Anweisung foreach mit einer Instanz des Typs List<T>, der die Schnittstelle IEnumerable<T> implementiert: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}");

Im nächste Beispiel wird die Anweisung foreach mit einer Instanz des Typs System.Span<T> verwendet, der keine Schnittstellen implementiert: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();
    }
}

Ab C# 7.3 können Sie die Iterationsvariable mit den Modifizierern ref oder ref readonly deklarieren, wenn die Current-Eigenschaft des Enumerators einen Verweisrückgabewert (ref T, wobei T dem Typ des Auflistungselements entspricht) zurückgibt.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. Im folgenden Beispiel wird eine ref-Iterationsvariable verwendet, um die Werte der Elemente in einem stackalloc-Array festzulegen.The following example uses a ref iteration variable to set the value of each item in a stackalloc array. Die Version ref readonly durchläuft die Auflistung, um alle Werte auszugeben.The ref readonly version iterates the collection to print all the values. Die readonly-Deklaration verwendet eine implizite lokale Variablendeklaration.The readonly declaration uses an implicit local variable declaration. Implizite Variablendeklarationen können wie explizit typisierte Variablendeklarationen mit ref- oder ref readonly-Deklarationen verwendet werden.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
    }
}

C#-SprachspezifikationC# language specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation.For more information, see the C# Language Specification. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.The language specification is the definitive source for C# syntax and usage.

Siehe auchSee also

Die foreach-Anweisung (C#-Spezifikation)The foreach statement (C# language specification)
Verwenden von foreach mit ArraysUsing foreach with Arrays
forfor
IterationsanweisungenIteration Statements
C#-SchlüsselwörterC# Keywords
C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide