在C#中是(;;)安全,它真正做了什么?

我在现有的代码中找到了一个空的for语句,我想知道它的作用是什么,它是否“安全”。 这只是感觉不对。

for(;;) { //some if statements and a case statement } 

谢谢!

这是创建无限循环的一种方法。 它是一个常规for循环,但具有空的初始化,条件和增量表达式。 因为条件表达式是无操作,所以循环永远不会退出。 它完全是“安全的”,假设它有一个终止条件(一个breakreturn语句[甚至是goto ,我猜])某处。

就个人而言,我更喜欢用while编写无限循环:

 while (true) { //some statements and a case statement } 

(因为for迭代while重复 )。

但是,在阅读了这个问题后 (由@jailf链接),我现在更喜欢while (42) { ... }

它等同于具有无限循环:

 while (true) { } 

它是安全的。 您需要提供外部退出机制。 IE,在for循环中rest。

这是无限循环或无限循环的常用习语。 如果您正在寻找一个在开始时不是有限的条件 – 例如用户输入或未知大小的文件的结尾,那么您故意可能有一个无限循环。 您可能也会看到while(1)while(true)同样的事情。 它说“做这件事{无论如何},直到没有……”

在该循环结构内部可能是条件语句和中断语句 ,例如:

 for(;;) { Console.Write("Enter your selection (1, 2, or 3): "); string s = Console.ReadLine(); int n = Int32.Parse(s); switch (n) { case 1: Console.WriteLine("Current value is {0}", 1); break; case 2: Console.WriteLine("Current value is {0}", 2); break; case 3: Console.WriteLine("Current value is {0}", 3); break; default: Console.WriteLine("Sorry, invalid selection."); break; } if(n==1 || n==2 || n==3) break; // out of the for(;;) loop } 

关键是否“安全”是弄清楚你如何离开那个循环的逻辑,或者你的无限循环将成为一个无意的无限循环和一个错误。

更多来自C#网站: HERE

for语句的所有表达式都是可选的; 例如,以下语句用于编写无限循环:

 > for (; ; ) { > // ... } 

取自MSDN

它与while (true) { /**/ } ……无限循环直到breakreturn或类似发生。

所有它真的“做”看起来丑陋的IMO;)

在SO上多次询问过这个问题。 关于该主题的最佳讨论在以下链接:

“for(;;)”比“while(TRUE)”快吗? 如果没有,为什么人们会使用它?

它是无限循环的有效语法。 你需要“打破”; 出来的。 这在C ++日IIRC中很受欢迎。

至于安全,你对此感到“错误”是正确的。 通常情况下会出现“if”条件,您可以决定是继续还是中断循环。 如果不validation所有执行路径,则很可能导致无限循环。 我会尝试以其他方式这样做。

它有时被称为“永远”循环,因为它就是它的作用。 寻找break;return; 循环内的语句或循环包装在try / catch块中。 就个人而言,我试着避免那种事情。

有没有breakreturnthrow语句? 这是唯一的出路。 安全吗? 这取决于你是否在无限循环中感到安全。 有些应用需要一个。

这在没有操作系统的嵌入式系统中非常常见。 如果您的程序终止,那么没有基础系统可以解决这个问题。 因此,大多数都有一个巨大的无限循环,其中大部分操作都是在其中处理的。