代码之家  ›  专栏  ›  技术社区  ›  stevehipwell

要使用哪个循环,用于还是执行/执行?

  •  4
  • stevehipwell  · 技术社区  · 15 年前

    当需要计数器时,使用C(或vb.net)应该使用哪个循环(for loop或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 
    }
    

    优势

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

    缺点

    • 必须手动管理计数器
    13 回复  |  直到 15 年前
        1
  •  10
  •   Marc Gravell    15 年前

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

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

    (何处) Criteria 是“继续运行”)。

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

        2
  •  9
  •   Firas Assaad    15 年前

    两全其美如何?

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

    编辑:现在我想起来了,我想与in t.maxvalue进行比较不是标准的一部分,而是要模拟一个无止境的for循环,在这种情况下,您可以使用:

    for (int iLoop = 0; !Criterea; iLoop++)
    
        3
  •  3
  •   Matt Howells    15 年前
    for (int iLoop = 0; iLoop < int.MaxValue && !Criteria; iLoop++) {
        //Do work here...
    }
    
        4
  •  3
  •   Guffa    15 年前

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

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

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

    这相当于:

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

    如果您有循环计数器,通常应该使用for循环使其更清晰。

        5
  •  1
  •   x2. alexey    15 年前

    我通常用于,因为它很简单。当循环后或循环前需要计数器或无法使用计数器时,我使用while。

        6
  •  1
  •   Grzenio    15 年前

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

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

    在你的特定案例中,我会选择任何看起来最可读的。

        7
  •  1
  •   VoteyDisciple    15 年前

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

    for (int iLoop = 0; iLoop < int.MaxValue && Criteria; iLoop++) { ... }
    
        8
  •  1
  •   knittl    15 年前

    for循环包括以下内容:

    for ( initialization; condition; action )
    

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

    我用循环来解决问题,没有明确的答案。

        9
  •  1
  •   Mr. Smith    15 年前

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

        10
  •  1
  •   Faizan S.    15 年前

    我个人会和 for循环 .

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

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

    编辑:int.maxvalue&!标准——比我最初的方法明显更好的方法;)

        11
  •  1
  •   stevemegson    15 年前

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

    如果循环遍历长度未知的内容,例如文件中的行,或者只维护计数器以在循环后使用总计,那么我将使用 do while .

    然而,归根结底,对于特定情况来说,它更具可读性。我希望您很难从编译的IL中分辨出使用的是哪个版本。

        12
  •  1
  •   user162558    15 年前

    ((区别b/w while和do while-->让我用一个例子告诉您: 如果一个人走进大厅去修理大厅里的炸弹,他必须在进去时接受检查。在另一种情况下,如果一个人进入大厅偷东西,他一定是在走出大厅时被检查过。因此,仅根据流程,我们必须使用循环条件……))

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

        13
  •  0
  •   Ólafur Waage    15 年前

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