Wie beende ich eine foreach-Schleife in 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";
    }
}

Wann immer eine Verletzung wahr ist, möchte ich sofort aus der foreachSchleife herauskommen . Wie mache ich es?

TylerH
quelle

Antworten:

208

Verwenden Sie break.


Unabhängig von Ihrer Frage sehe ich in Ihrem Code die Zeile:

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

In dieser Zeile nehmen Sie einen booleschen Wert an (name.firstname == null). Dann wenden Sie den !Operator darauf an. Wenn der Wert dann true ist, setzen Sie Violated auf false. sonst zu wahr. Im Grunde genommen wird "Verletzt" auf den gleichen Wert wie der ursprüngliche Ausdruck gesetzt (name.firstname == null). Warum nicht das verwenden, wie in:

Violated = (name.firstname == null);
Konfigurator
quelle
Ich mag es nicht, unnötige Tests und Verneinungen zu sehen.
John Grabauskas
102

Verwenden Sie einfach die Anweisung:

break;
Greg Beech
quelle
31

Verwenden Sie das breakSchlüsselwort.

Samuel
quelle
9

Schauen Sie sich diesen Code an, er kann Ihnen helfen, schnell aus der Schleife herauszukommen!

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
quelle
0

Während des Testens stellte ich fest, dass jede Schleife nach der Pause zur Bettelschleife geht und nicht aus der Schleife heraus. Also habe ich foreach in for geändert und break funktioniert in diesem Fall korrekt - nach der Unterbrechung verlässt der Programmfluss die Schleife.

Sharunas Bielskis
quelle
Die MS-Dokumente sagen, dass sie breakausgehen und in meinem Code auch docs.microsoft.com/en-us/dotnet/csharp/language-reference/… continue zur nächsten Iteration übergehen .
Miro J.