2010-09-09 101 views
0

我个人使用while(true)无限循环,但我在网上看到使用for(;;)的例子。实际上,两者之间是否有区别,还是仅仅是一种风格?while(true)和for(;;)之间的实际区别是什么?

+2

如果你问我,而(真)看起来更好,但你可以只检查生成的IL会让你本身如果有任何diffrence ..的 – Peter 2010-09-09 09:44:14

+0

可能重复[为(;)或同时(真) - 哪一个是正确的C#无限循环?](http://stackoverflow.com/questions/1401159/for-or-while-true-which-is-the-cor-circ-c-infinite-loop) – 2010-09-09 11:56:14

回答

7

没有区别。我检查了IL。我写了如下两个函数。

class Program 
{ 
    static void Main(string[] args) 
    { 
     System.Console.ReadLine(); 
    } 

    static void EndlessWhile() 
    { 
     while (true) 
     { 
      Console.WriteLine("Hello"); 
     } 
    } 

    static void EndlessFor() 
    { 
     for (; ;) 
     { 
      Console.WriteLine("Hello"); 
     } 
    } 
} 

// IL of both the functions are mentioned below. 

.method private hidebysig static void EndlessWhile() cil managed 
{ 
    // Code size  20 (0x14) 
    .maxstack 1 
    .locals init ([0] bool CS$4$0000) 
    IL_0000: nop 
    IL_0001: br.s  IL_0010 
    IL_0003: nop 
    IL_0004: ldstr  "Hello" 
    IL_0009: call  void [mscorlib]System.Console::WriteLine(string) 
    IL_000e: nop 
    IL_000f: nop 
    IL_0010: ldc.i4.1 
    IL_0011: stloc.0 
    IL_0012: br.s  IL_0003 
} // end of method Program::EndlessWhile 

.method private hidebysig static void EndlessFor() cil managed 
{ 
    // Code size  20 (0x14) 
    .maxstack 1 
    .locals init ([0] bool CS$4$0000) 
    IL_0000: nop 
    IL_0001: br.s  IL_0010 
    IL_0003: nop 
    IL_0004: ldstr  "Hello" 
    IL_0009: call  void [mscorlib]System.Console::WriteLine(string) 
    IL_000e: nop 
    IL_000f: nop 
    IL_0010: ldc.i4.1 
    IL_0011: stloc.0 
    IL_0012: br.s  IL_0003 
} // end of method Program::EndlessFor 
+0

不错,谢谢! :) – 2010-09-09 10:33:22

1

可能只是风格。

我依稀记得在具有C++编译器给我一个警告的while(true)而不是for(;;)

这可能是这里的款式从最初来到了过去。

1

他们生成相同的IL,所以选择你喜欢的任何东西。话虽如此,无尽的循环通常不是无止境的,所以你可能想要将退出条件表达为循环的一部分。

+0

无限循环我写的是一个运行在独立线程上的测试方法,每秒都会引发一个事件。它模拟每秒发送一次更新的服务器。 – 2010-09-09 09:53:53

+1

@DanielT:我想你依赖于被中止的线程。你可以让线程优雅地退出。 – 2010-09-09 09:56:23

相关问题