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