¿Cómo salgo de un bucle foreach en 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";
    }
}

Siempre que la violación sea cierta, quiero salir del foreachciclo de inmediato. ¿Cómo lo hago?

TylerH
fuente

Respuestas:

208

Utilice break.


Sin relación con su pregunta, veo en su código la línea:

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

En esta línea, toma un valor booleano (name.firstname == null). Luego, le aplica el !operador. Luego, si el valor es verdadero, establece Violado en falso; de lo contrario a verdadero. Básicamente, Violated se establece en el mismo valor que la expresión original (name.firstname == null). ¿Por qué no usar eso, como en:

Violated = (name.firstname == null);
configurador
fuente
No me gusta ver pruebas innecesarias y negación.
John Grabauskas
102

Solo usa la declaración:

break;
Greg Beech
fuente
9

Mire este código, ¡puede ayudarlo a salir del ciclo rápidamente!

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

Durante las pruebas, encontré que cada bucle tras la pausa va al comienzo del bucle y no fuera del bucle. Así que cambié foreach a for y break, en este caso funcionan correctamente, después de que el flujo del programa de interrupción se sale del ciclo.

Sharunas Bielskis
fuente
Los documentos de MS dicen que breakse apaga y en mi código también lo hace docs.microsoft.com/en-us/dotnet/csharp/language-reference/… continue pasa a la siguiente iteración.
Miro J.