我怎样才能继续上环

时间:2012-02-05 09:50:57

标签: c# c#-4.0 loops foreach while-loop

我有这段代码:

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。我怎么能这样做?

4 个答案:

答案 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)

您无法从内部循环继续外循环。 您有两种选择:

  1. 坏的:在打破内部循环之前设置一个布尔标志,然后检查这个标志并在设置时继续。

  2. 好的:只需将你的大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;
            } 
     }

希望这会对你有所帮助。