我有这段代码:
foreach(int i in Directions)
{
if (IsDowner(i))
{
while (IsDowner(i))
{
continue;
//if (i >= Directions.Count)
//{
// break;
//}
}
//if (i >= Directions.Count)
//{
// break;
//}
if (IsForward(i))
{
continue;
//if (i >= Directions.Count)
//{
// break;
//}
//check = true;
}
//if (i >= Directions.Count)
//{
// break;
//}
if (IsUpper(i))
{
//if (i >= Directions.Count)
//{
// break;
//}
num++;
//check = false;
}
//if (check)
//{
// num++;
//}
}
}
但我想在continue
循环中foreach
while
。我怎么能这样做?
答案 0 :(得分:6)
您可以从break
循环中while
继续前进到外部foreach
循环的下一次迭代,这将启动一个新的while
循环:
foreach(int i in Directions)
{
while (IsDowner(i))
{
break;
}
}
如果你在while
循环之后有一些其他代码,你不想在这种情况下执行你可以使用一个布尔变量,它将在突破while
循环之前设置这样代码就不会执行并自动跳转到forach
循环的下一次迭代:
foreach(int i in Directions)
{
bool broken = false;
while (IsDowner(i))
{
// if some condition =>
broken = true;
break;
}
if (broken)
{
// we have broken out of the inner while loop
// and we don't want to execute the code afterwards
// so we are continuing on the next iteration of the
// outer foreach loop
continue;
}
// execute some other code
}
答案 1 :(得分:6)
您无法从内部循环继续外循环。 您有两种选择:
坏的:在打破内部循环之前设置一个布尔标志,然后检查这个标志并在设置时继续。
好的:只需将你的大spagetti代码重构为一组函数,这样你就没有内循环。
答案 2 :(得分:4)
在我看来,在复杂的嵌套循环中使用 goto 是合理的(无论你是否应该避免使用复杂的嵌套循环是另一个问题)。
你可以这样做:
foreach(int i in Directions)
{
while (IsDowner(i))
{
goto continueMainLoop;
}
//There be code here
continueMainLoop:
}
如果其他人必须处理代码,请务必小心,确保他们不是恐惧症。
答案 3 :(得分:0)
您可以尝试使用内部for循环的谓词,如:
foreach (item it in firstList)
{
if (2ndList.Exists(x => it.Name.StartsWith(x))) //use predicate instead of for loop.
{
continue;
}
}
希望这会对你有所帮助。