2010-09-09 144 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

相關問題