HOWTO · Csharp

Beenden einer Foreach-Schleife in C#

In diesem Handbuch erfahren Sie, wie Sie eine foreach-Schleife in C# verlassen.

Auf dieser Seite

Um eine C#-foreach-Schleife bei einer erfüllten Bedingung zu beenden, verwenden Sie break. Damit wird die nächstgelegene umschließende Schleife verlassen; anschließend wird die erste Anweisung nach dieser Schleife ausgeführt. Verwenden Sie return, wenn auch die Methode beendet werden soll, in der die Anweisung steht. Bei verschachtelten Schleifen können Sie die Bedingung mit einem Flag aus der inneren Schleife weitergeben und dann die äußere Schleife mit break verlassen.

Mit break die Schleife verlassen

Dieses Beispiel sucht in einer Liste nach dem Wert 4. Die Prüfung erfolgt vor der Ausgabe, daher verarbeitet die Schleife weder den passenden Wert noch die folgenden Elemente. Das Beispiel gibt alle Werte vor 4 aus und fährt danach mit der Anweisung nach der Schleife fort.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };

        foreach (int number in numbers)
        {
            if (number == 4)
            {
                break;
            }

            Console.WriteLine(number);
        }

        Console.WriteLine("Loop finished");
    }
}
1
2
3
Loop finished

break beendet nur die nächstgelegene umschließende Schleife. Danach wird Console.WriteLine("Loop finished") ausgeführt, das nach der Schleife steht. Bei einer foreach-Schleife wird eine aufzählbare Sequenz durchlaufen; im Beispiel wird eine List<int> verwendet. Setzen Sie die Bedingung vor die Arbeitsschritte, die für das passende Element übersprungen werden sollen. Steht sie dahinter, wird das Element verarbeitet, bevor die Schleife endet.

return beendet die Methode, in der es steht

Verwenden Sie return, wenn die Methode nach Erreichen der Bedingung keine weiteren Arbeitsschritte mehr ausführen soll. Das Beispiel gibt alle Werte vor 4 aus und kehrt dann zu Main zurück.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        PrintBeforeFour(new List<int> { 1, 2, 3, 4, 5, 6 });
        Console.WriteLine("Back in Main");
    }

    static void PrintBeforeFour(List<int> numbers)
    {
        foreach (int number in numbers)
        {
            if (number == 4)
            {
                return;
            }

            Console.WriteLine(number);
        }

        Console.WriteLine("Method finished after the loop");
    }
}
1
2
3
Back in Main

Wird return innerhalb von PrintBeforeFour ausgeführt, geht die Kontrolle an den Aufrufer zurück; die nachfolgende Anweisung in PrintBeforeFour wird übersprungen. Main fährt dann nach dem Aufruf fort. Das unterscheidet sich von break: Damit wird die Schleife verlassen, die Ausführung in derselben Methode geht jedoch weiter. Gibt eine Methode einen Wert zurück, muss jeder Ausführungspfad außerdem einen Wert des deklarierten Rückgabetyps liefern; eine void-Methode kann return ohne Wert verwenden.

Mit einem Flag verschachtelte Schleifen verlassen

Ein break innerhalb einer inneren Schleife beendet nur diese Schleife. Soll ein dort gefundener Treffer auch eine äußere foreach-Schleife beenden, speichern Sie diese Information in einem Flag und prüfen Sie das Flag nach der inneren Schleife. Das Beispiel gibt die Werte bis einschließlich 4 aus und beendet dann beide Schleifen.

using System;

class Program
{
    static void Main()
    {
        int[][] rows =
        {
            new[] { 1, 2 },
            new[] { 3, 4 },
            new[] { 5, 6 }
        };
        bool found = false;

        foreach (int[] row in rows)
        {
            foreach (int value in row)
            {
                Console.WriteLine(value);
                if (value == 4)
                {
                    found = true;
                    break;
                }
            }

            if (found)
            {
                break;
            }
        }

        Console.WriteLine("Search finished");
    }
}
1
2
3
4
Search finished

Das innere break beendet die Suche in der aktuellen Zeile. Nach der inneren Schleife ist das Flag weiterhin auf true gesetzt, sodass die äußere Schleife bei ihrer nächsten Prüfung beendet werden kann. Der Wert 4 wird ausgegeben, weil das Beispiel jeden Wert vor der Prüfung ausgibt; verschieben Sie die Prüfung nach vorn, wenn der passende Wert nicht ausgegeben werden soll. Ein Flag ist hilfreich, wenn die Entscheidung in einer verschachtelten Logik fällt und die äußere Schleife darauf reagieren muss. Wird die Bedingung direkt in der äußeren Schleife geprüft, ist ein einfaches break klarer.

Die passende Ausstiegsanweisung wählen

Verwenden Sie break, um die aktuelle Schleife zu beenden und die Methode fortzusetzen. Mit return beenden Sie auch die Methode, in der die Anweisung steht. Ein Flag ist sinnvoll, wenn eine innere Schleife feststellt, dass die äußere Schleife beendet werden muss. Soll nur der Rest des aktuellen Durchlaufs übersprungen und das nächste Element geprüft werden, verwenden Sie continue; damit endet die Schleife nicht. Dies sind C#-Steuerflussanweisungen und keine Methodenaufrufe. Wählen Sie die Anweisung, deren Geltungsbereich zu den Arbeitsschritten passt, die beendet werden sollen. Platzieren Sie die Bedingung je nachdem vor oder nach der Verarbeitung, ob das passende Element noch verarbeitet werden soll.