有没有一种标准的方法来编写一个不需要更新语句的for循环?

时间:2014-04-18 22:14:36

标签: c# loops for-loop

众所周知,大多数for循环都采用以下形式:

for (int i = 0; i < whatever; i++)
{
    //do stuff
}

我正在编写一种方法,当时不适合包含&#34; i ++&#34;如上面的格式,因为我正在嵌套在这个循环中的循环中更新。所以现在,我有这个:

List<Item> itemList = new List<Item>();
PopulateListOfItems(itemList);

List<List<Item>> itemSubListList = new List<List<Item>>();

for (int i = 0; i < itemList.Count; //i doesn't need updating here)
{
    List<Item> subList = new List<Item>();

    for (int j = 0; j < subListSize && i < itemList.Count; j++)
    {   
        subList.Add(itemList[i++]);
    }

    itemSubListList.Add(subList;
}

是否有标准的方法来编写这样的循环,可能包括某种虚拟代码,其中i ++通常会明确表示不需要更新?也许就像......

for (int i = 0; i < whatever; true)
{
    //do stuff
}

...或者我只是在漫长的一周结束时,我的大脑太油腻了,以至于我真的应该只是使用while循环或其他东西?

顺便说一下,我已经用C#写了这个,是的,但是这可以适用于各种语言。

3 个答案:

答案 0 :(得分:8)

只是省略它:

for (int i = 0; i < whatever; )
{
    //do stuff
}

事实上,for - 循环的所有部分都是可选的(至少在C#中,对于所有类C语言,这可能不相同)。以下内容创建了一个无限循环:

for (;;)
{
    //do stuff
}

当然,您也可以使用while循环完成此操作,正如其他答案所建议的那样。这两种解决方案都是完全有效的,您选择哪种解决方案主要是风格问题。一般情况下,您应该选择最清楚地与读者沟通的解决方案代码尝试执行的操作。

答案 1 :(得分:3)

只需使用while循环而不是for循环。

var i = 0;

while (i < whatever)
{
   // Do stuff including updating i.
}

答案 2 :(得分:2)

for循环结构只是while循环的语法糖,所有for循环都会分解为while循环。

for(int i = 0; i < whatever; i++)
{
    //do stuff
}

最终意味着:

{
    int i = 0;
    while(i < whatever)
    {
        //do stuff
        i++;
    }
}

(注意用于确定整数范围的附加花括号)

您省略的for循环的任何部分也会从分解的while循环中省略,因此您必须手动处理它们。如果你不使用所有三个部分,你也可以只编写一个while循环(特别是如果你省略的部分之一是变量初始化程序,因为我提到的变量范围)。