使用哪个循环,for或do / while?

时间:2009-08-25 10:16:11

标签: c# loops

使用C#(或VB.NET)当需要计数器时,应该使用哪个循环(for循环或do / while循环)?

如果循环只应迭代设定次数或设定范围,是否会产生影响?

场景A - for循环

for (int iLoop = 0; iLoop < int.MaxValue; iLoop++)
{
  //Maybe do work here

  //Test criteria
  if (Criteria)
  {
    //Exit the loop
    break;
  }

  //Maybe do work here
}

优点

  • 计数器被声明为循环的一部分
  • 易于实施计数器范围

缺点

  • 必须使用if来离开循环

场景B - 执行/循环

int iLoop = 0;
do
{
  //Increment the counter
  iLoop++;

  //Do work here
} while (Criteria);

int iLoop = 0;
while (Criteria)
{
  //Increment the counter
  iLoop++; 

  //Do work here 
}

优点

  • 离开循环是循环结构的一部分
  • 选择在循环块之前或之后进行评估

缺点

  • 必须手动管理计数器

13 个答案:

答案 0 :(得分:10)

为了完整起见,您还可以使用选项D:

for (int iLoop = 0; Criteria; iLoop++)
{
   // work here
}

(其中Criteria是“继续运行”)

for循环中的条件不必涉及iLoop。但是,不寻常,但非常可爱 - 只会在之前评估

答案 1 :(得分:9)

两全其美:

for (int iLoop = 0; iLoop < int.MaxValue && !Criteria; iLoop++)

编辑:现在我考虑一下,我想与int.MaxValue进行比较不是标准的一部分,而是模仿无限循环的东西,在这种情况下你可以使用:

for (int iLoop = 0; !Criterea; iLoop++)

答案 2 :(得分:3)

for (int iLoop = 0; iLoop < int.MaxValue && !Criteria; iLoop++) {
    //Do work here...
}

答案 3 :(得分:3)

您可以使用要用于循环的实际条件,而不是for循环中的虚拟条件:

场景A2 - 包含自定义条件的for循环:

for (int iLoop = 0; Criteria; iLoop++) {

  // do work here

}

这相当于:

{
   int iLoop = 0;
   while (Criteria) {

      // do work here

      iLoop++;
   }
}

如果你有一个循环计数器,你通常应该使用for循环来使它更清晰。

答案 4 :(得分:1)

我通常使用它,因为它很简单。我在循环之前或之前需要计数器时使用,或者如果不能使用,则使用。

答案 5 :(得分:1)

您始终可以将退出条件添加到for循环:

for (int iLoop = 0; iLoop < int.MaxValue && Criteria; iLoop++)
{
  //Maybe do work here
}

我真的会选择在您的特定情况下最具可读性的内容。

答案 6 :(得分:1)

在这种情况下,没有理由不使用for循环。即使你有其他标准,写下来也是完全有效的:

for (int iLoop = 0; iLoop < int.MaxValue && Criteria; iLoop++) { ... }

答案 7 :(得分:1)

我个人会选择 for循环

最好是阅读,更常用和非常优化。

for (int iLoop = 0; iLoop < int.MaxValue && !Criteria; iLoop++)
{
// Do Work
}

编辑:int.MaxValue&amp;&amp; !标准&lt; - 比我最初的方法更好的方法;)

答案 8 :(得分:1)

for循环由以下内容组成:

for ( initialization; condition; action )

如果要检查您的标准,您不需要额外的费用,您认为i < value是什么?它只不过是一个标准。

我在使用循环时遇到问题,没有明确的答案

答案 9 :(得分:1)

编写一些测试用例,看看哪种方法最适合您。看一下这个链接:.Net/C# Loop Performance Test (FOR, FOREACH, LINQ, & Lambda)

答案 10 :(得分:1)

如果我实际上在循环中使用计数器,比如作为数组的索引,并且作为条件的一部分,即“停在数组的末尾”,我倾向于使用for “而不是”只是不要溢出“。

如果我正在循环某个长度未知的内容,例如文件中的行,或者只是让计数器在循环后使用总计,那么我将使用dowhile

然而,它实际上归结为对于特定情况更具可读性。我希望你很难从已编译的IL中告诉我使用了哪个版本。

答案 11 :(得分:1)

<(>(((差异b / w while和do while - &gt;让我告诉你一个例子:     如果一个人进入大厅在大厅内安装炸弹,他必须在进入时检查..在另一种情况下,如果一个人进入大厅从那里偷东西,他必须在走出大厅时被检查..所以基于过程只有我们必须使用我们的循环条件....))))

for循环可以执行固定或给定次数的代码块。如果你的计数器变量依赖于那个代码块(意味着在循环条件内),你可以使用for循环

答案 12 :(得分:0)

至少对我来说,当我需要遍历数组并且不需要中断时,我会使用for()。当我需要处理未知时间的某些事情时,请执行()和while()。