我個人使用while(true)
無限循環,但我在網上看到使用for(;;)
的例子。實際上,兩者之間是否有區別,還是僅僅是一種風格?while(true)和for(;;)之間的實際區別是什麼?
回答
沒有區別。我檢查了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
不錯,謝謝! :) – 2010-09-09 10:33:22
可能只是風格。
我依稀記得在具有C++編譯器給我一個警告的while(true)
而不是for(;;)
這可能是這裏的款式從最初來到了過去。
他們生成相同的IL,所以選擇你喜歡的任何東西。話雖如此,無盡的循環通常不是無止境的,所以你可能想要將退出條件表達爲循環的一部分。
無限循環我寫的是一個運行在獨立線程上的測試方法,每秒都會引發一個事件。它模擬每秒發送一次更新的服務器。 – 2010-09-09 09:53:53
@DanielT:我想你依賴於被中止的線程。你可以讓線程優雅地退出。 – 2010-09-09 09:56:23
- 1. 以下for和while語句之間是否有實際區別?
- 2. 'while(true)`vs`while(\ true)`有什麼區別?
- 3. `_.defaults`和`_.extend`之間的實際區別是什麼?
- 4. 特殊形式和宏之間的實際區別是什麼?
- 5. int *和int []之間的實際區別是什麼?
- 6. Response.Write和<%= %>之間的實際區別是什麼?
- 7. while(cin)和while(cin >> num)之間的區別是什麼
- 8. 是什麼之間的assertEquals()VS assertTrue()TestNG中的實際區別?
- 9. while(* p){p ++;},while(* ++ p){;}和while(* p ++){;}之間有什麼區別?
- 10. List和IEnumerable之間的實際區別
- 11. meshgrid和ndgrid之間的實際區別?
- 12. UIAccessibilityLayoutChangedNotification和UIAccessibilityScreenChangedNotification之間的實際區別?
- 13. jquery:stop(true)和clearQueue()之間的區別是什麼
- 14. GC.GetTotalMemory(false)和GC.GetTotalMemory(true)之間的區別是什麼
- 15. [DataContractAttribute(IsReference = true)]和[DataContract]之間的區別是什麼?
- 16. Do/While和While/Do之間的區別
- 17. $(())和expr之間的區別是什麼?
- 18. $和$ .fn之間的區別是什麼?
- 19. ++和:haskell之間的區別是什麼?
- 20. $(「」)和$ .find(「」)之間的區別是什麼?
- 21. 「\」和「\。」之間的區別是什麼?
- 22. 「$ | ++」和「$ | = 1」之間的區別是什麼
- 23. $(...)和`...`之間的區別是什麼
- 24. .equals()和==之間的區別是什麼?
- 25. [undefined]和[,]之間的區別是什麼?
- 26. System.Timers.Timer Enabled = true和.Start()之間的區別Enabled = true和.Start()之間的區別
- 27. Class和Class <?>之間的實際區別是什麼(如果有的話)?
- 28. Eclipse Classic和Eclipse for Java Developers之間的區別是什麼?
- 29. Atlassian SDK中atlas-run和atlas-run-standalone之間的實際區別是什麼?
- 30. 命令窗口和立即窗口之間的實際區別是什麼?
如果你問我,而(真)看起來更好,但你可以只檢查生成的IL會讓你本身如果有任何diffrence ..的 – Peter 2010-09-09 09:44:14
可能重複[爲(;)或同時(真) - 哪一個是正確的C#無限循環?](http://stackoverflow.com/questions/1401159/for-or-while-true-which-is-the-cor-circ-c-infinite-loop) – 2010-09-09 11:56:14