C# - цикл foreach внутри цикла while-вырваться из foreach и продолжить цикл while сразу?
while (foo() == true)
{
   foreach (var x in xs)
   {
       if (bar(x) == true)
       {
           //"break;" out of this foreach
           //AND "continue;" on the while loop.
       }
   }
   //If I didn't continue, do other stuff.
}
Я немного застрял на том, как это сделать.
 Update: я исправил вопрос. Я опустил тот факт, что мне нужно обрабатывать другие вещи, если я не вызываю continue; в цикле while.
Извините, я не понял, что дважды использовал слово "что-то".
6 ответов
Я бы переписал так:
while (foo() == true)
{
   foreach (var x in xs)
   {
       if (bar(x) == true)
       {
           //"break;" out of this foreach
           //AND "continue;" on the while loop.
       }
   }
   //If I didn't continue, do other stuff.
   DoStuff();
}
as
while (foo()) // eliminate redundant comparison to "true".
{
   // Eliminate unnecessary loop; the loop is just 
   // for checking to see if any member of xs matches predicate bar, so
   // just see if any member of xs matches predicate bar!
   if (!xs.Any(bar))        
   {
       DoStuff();
   }
}
while (something)
{
   foreach (var x in xs)
   {
       if (something is true)
       {
           //Break out of this foreach
           //AND "continue;" on the while loop.
           break;
       }
   }
}
Это должно адресовать ваше требование:
while (something)
{   
    bool doContinue = false;
    foreach (var x in xs)   
    {       
        if (something is true)       
        {           
            //Break out of this foreach           
            //AND "continue;" on the while loop.          
            doContinue = true; 
            break;       
        }   
    }
    if (doContinue)
        continue;
    // Additional items.
}
этот вид кода происходит часто, как только вам нужно break для распространения через вложенные конструкции.  Является ли это запах кода или нет, для обсуждения: -)
while (something)
{
   foreach (var x in xs)
   {
       if (something is true)
       {
           break;
       }
   }
}
однако, не будут ли оба эти значения всегда приравниваться к true???
Итак, вы хотите продолжить после разрыва?
while (something)
{
    bool hit = false;
    foreach (var x in xs)
    {
        if (something is true)
        {
            hit = true;
            break;
        }
    }
    if(hit)
        continue;
}