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

使用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 – do / while循环

 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 } 

好处

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

缺点

  • 必须手动管理计数器

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

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

Criteria是“继续运行”)

for循环中的条件不必涉及iLoop 。 虽然不寻常,但非常可爱 – 只是工作之前评估。

两个世界中最好的:

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

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

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

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

场景A2 – 具有自定义条件的for循环:

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

这相当于:

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

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

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

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

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

我真的会选择在你的特定情况下看起来最具可读性的东西。

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

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

for循环包括以下内容:

 for ( initialization; condition; action ) 

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

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

写一些测试用例,看哪哪个最适合你。 看看这个链接: .Net / C#循环性能测试(FOR,FOREACH,LINQ和Lambda)

就个人而言,我会选择for循环

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

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

编辑:int.MaxValue &&!Criteria < - 比我最初的方法更好的方法;)

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

如果我循环一个长度未知的东西,比如文件中的行,或者只是保持计数器在循环后使用总计,那么我将使用dowhile

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

((((差异b / w而且同时 – >让我告诉你一个例子:如果一个人进入大厅在大厅内修理炸弹,他必须在进入时检查..在另一个案例中如果一个人进入大厅从那里偷东西,他必须在走出大厅时进行检查..所以基于这个过程只有我们必须使用我们的循环条件….))))

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

至少对我来说,当我需要遍历数组并且不需要中断时,我会使用for()。 并且do()和while()当我需要处理未知时间的东西时。