Jak wyjść z pętli foreach w C #?

85
foreach (var name in parent.names)
{
    if name.lastname == null)
    {
        Violated = true;
        this.message = "lastname reqd";
    }

    if (!Violated)
    {
        Violated = !(name.firstname == null) ? false : true;
        if (ruleViolated)
            this.message = "firstname reqd";
    }
}

Zawsze, gdy naruszenie jest prawdą, chcę natychmiast wyjść z foreachpętli. Jak mam to zrobić?

TylerH
źródło

Odpowiedzi:

208

Użyj break.


Bez związku z twoim pytaniem, widzę w twoim kodzie wiersz:

Violated = !(name.firstname == null) ? false : true;

W tym wierszu bierzesz wartość logiczną (name.firstname == null). Następnie stosujesz !do niego operator. Następnie, jeśli wartość jest true, ustaw Violed na false; inaczej do prawdy. Zasadniczo więc Naruszone ma taką samą wartość, jak oryginalne wyrażenie (name.firstname == null). Dlaczego nie użyć tego, jak w:

Violated = (name.firstname == null);
konfigurator
źródło
Nie lubię patrzeć na niepotrzebne testy i negacje.
John Grabauskas
103

Po prostu użyj oświadczenia:

break;
Greg Beech
źródło
9

Spójrz na ten kod, może pomóc ci szybko wyjść z pętli!

foreach (var name in parent.names)
{
   if (name.lastname == null)
   {
      Violated = true;
      this.message = "lastname reqd";
      break;
   }
   else if (name.firstname == null)
   {
      Violated = true;
      this.message = "firstname reqd";
      break;
   }
}
Marcelo Lujan
źródło
0

Podczas testów stwierdziłem, że każda pętla po przerwie przechodzi do początku pętli, a nie poza pętlę. Zmieniłem więc foreach na for i przerwa w tym przypadku działa poprawnie - po przerwie przepływ programu wychodzi z pętli.

Sharunas Bielskis
źródło
Dokumentacja MS mówi, że breakwychodzi, aw moim kodzie robi to również. Docs.microsoft.com/en-us/dotnet/csharp/language-reference/ ... continue przechodzi do następnej iteracji.
Miro J.