我个人使用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