Как выйти из цикла foreach в 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";
    }
}

Если нарушение истинно, я хочу немедленно выйти из foreachцикла. Как это сделать?

TylerH
источник

Ответы:

212

Используйте break.


Не связанный с вашим вопросом, я вижу в вашем коде строку:

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

В этой строке вы берете логическое значение (name.firstname == null). Затем вы применяете !к нему оператор. Затем, если значение истинно, вы устанавливаете Violated на false; в противном случае - истина. Таким образом, Violated имеет то же значение, что и исходное выражение (name.firstname == null). Почему бы не использовать это, например:

Violated = (name.firstname == null);
конфигуратор
источник
Я не люблю видеть ненужные тесты и отрицание.
Джон
107

Просто используйте инструкцию:

break;
Грег Бич
источник
10

Посмотрите на этот код, он может помочь вам быстро выйти из цикла!

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

Во время тестирования я обнаружил, что цикл foreach после прерывания переходит в начало цикла, а не выходит из цикла. Поэтому я заменил foreach на for и break в этом случае работает правильно - после break поток программы выходит из цикла.

Шарунас Бельскис
источник
Документы MS говорят, что breakвыходит, и в моем коде это тоже происходит. Docs.microsoft.com/en-us/dotnet/csharp/language-reference/… continue переходит к следующей итерации.
Миро Дж.