在C#中是(;;)安全,它真正做了什么?
我在现有的代码中找到了一个空的for语句,我想知道它的作用是什么,它是否“安全”。 这只是感觉不对。
for(;;) { //some if statements and a case statement }
谢谢!
这是创建无限循环的一种方法。 它是一个常规for
循环,但具有空的初始化,条件和增量表达式。 因为条件表达式是无操作,所以循环永远不会退出。 它完全是“安全的”,假设它有一个终止条件(一个break
或return
语句[甚至是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) { /**/ }
……无限循环直到break
或return
或类似发生。
所有它真的“做”看起来丑陋的IMO;)
在SO上多次询问过这个问题。 关于该主题的最佳讨论在以下链接:
“for(;;)”比“while(TRUE)”快吗? 如果没有,为什么人们会使用它?
它是无限循环的有效语法。 你需要“打破”; 出来的。 这在C ++日IIRC中很受欢迎。
至于安全,你对此感到“错误”是正确的。 通常情况下会出现“if”条件,您可以决定是继续还是中断循环。 如果不validation所有执行路径,则很可能导致无限循环。 我会尝试以其他方式这样做。
它有时被称为“永远”循环,因为它就是它的作用。 寻找break;
或return;
循环内的语句或循环包装在try / catch块中。 就个人而言,我试着避免那种事情。
有没有break
, return
或throw
语句? 这是唯一的出路。 安全吗? 这取决于你是否在无限循环中感到安全。 有些应用需要一个。
这在没有操作系统的嵌入式系统中非常常见。 如果您的程序终止,那么没有基础系统可以解决这个问题。 因此,大多数都有一个巨大的无限循环,其中大部分操作都是在其中处理的。