Como faço para sair de um loop foreach em C #?

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

Sempre que violado for verdadeiro, quero sair do foreachloop imediatamente. Como eu faço isso?

TylerH
fonte

Respostas:

212

Use break.


Não relacionado à sua pergunta, vejo em seu código a linha:

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

Nesta linha, você obtém um valor booleano (name.firstname == null). Então, você aplica o !operador a ele. Então, se o valor for verdadeiro, você define Violado como falso; caso contrário, para verdadeiro. Então, basicamente, Violated é definido com o mesmo valor da expressão original (name.firstname == null). Por que não usar isso, como em:

Violated = (name.firstname == null);
configurador
fonte
Não gosto de ver testes desnecessários e negações.
John Grabauskas
107

Basta usar a declaração:

break;
Greg Beech
fonte
10

Veja este código, ele pode ajudá-lo a sair do loop rapidamente!

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

Durante o teste, descobri que o loop foreach após o intervalo vai para o início do loop e não fora dele. Portanto, mudei foreach para for e break, neste caso, funcionam corretamente - depois que o fluxo do programa de interrupção sai do loop.

Sharunas Bielskis
fonte
Os documentos do MS dizem que breaksai e em meu código também docs.microsoft.com/en-us/dotnet/csharp/language-reference/… continue vai para a próxima iteração.
Miro J.