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

时间:2010-10-08 18:02:11

标签: c# .net for-loop

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

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

谢谢!

10 个答案:

答案 0 :(得分:17)

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

就个人而言,我更喜欢用while s:

编写无限循环
while (true) 
{  
    //some statements and a case statement
}

(因为for用于迭代while用于重复)。

但是,在阅读this question(由@jailf链接)之后,我现在更喜欢while (42) { ... }

答案 1 :(得分:5)

它等同于拥有无限循环:

while (true) {

}

这很安全。您需要提供外部退出机制。 I.E.,在for循环中休息。

答案 2 :(得分:4)

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

在该循环结构内部可能是条件和break statement,例如:

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    

 }

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

更多信息来自for的{​​#3}}

的C#网站

答案 3 :(得分:3)

  

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

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

取自MSDN

答案 4 :(得分:3)

while (true) { /**/ } ...无限循环相同,直到breakreturn或类似情况发生。

所有它真的“确实”看起来很难看IMO;)

答案 5 :(得分:3)

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

Is "for(;;)" faster than "while (TRUE)"? If not, why do people use it?

答案 6 :(得分:2)

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

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

答案 7 :(得分:2)

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

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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