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?

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);

Ich mag es nicht, unnötige Tests und Verneinungen zu sehen.
John Grabauskas



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;
   }
}

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.


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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.