2011-01-05 70 views
9

我一直在寻找通过为我使用的应用程序的一些示例源代码,我碰到这条线进来:在C#应用程序中使用“for(;;)”?

for (;;) 
{ 
// The rest of the application's code 
} 

看起来是创建一个无限循环,但我不熟悉“ ;;”不幸的是,Google很难。

+1

[C#for循环在缺少所有表达式时做了什么?例如,用于(;;){}](http://stackoverflow.com/questions/697307/what-does-ac-for-loop-do-when-all-the-expressions-are-missing-eg-for) – paxdiablo 2011-01-05 13:43:09

回答

12

是的,这是一个无限循环。这是一个普通的循环,没有条件表达式。

documentation for for

所有的for语句的表达都是可选的;例如,下面的语句是用来写一个无限循环:

for (; ;) 
{ 
    // ... 
} 
+0

谢谢,这是常见的做法(IE:不是黑客攻击) – JuniorDeveloper1208 2011-01-05 13:27:51

+2

有一点要注意的是,你应该有上从打破它,有一个非循环结束的条件通常是坏... @toleero ,这是一个风格问题。我喜欢使用'while(true){}'循环,它更直接点IMO,但任何一个都是标准惯例。 – 2011-01-05 13:28:25

+1

@ T84 - 一种常见,但许多使用'而(真){}'的可读性。 – Oded 2011-01-05 13:29:12

7

它是无限循环。

等于

while (true) { 
} 
0

有趣的阅读这篇文章:

http://csharpdevelop.blogspot.com/2004/05/writing-infinite-loop.html

这种代码中出现了不少 在工作线程等待一些 工作要做。这是一种常见的代码 模式。循环 语句正文中的所有代码都至关重要。必须经常检查“退出 条件”。 这意味着要做的工作必须是 。通常这是一个较小的 工作夹头工作的 更大的工作,它被赋予完成。

1

这与for (<initial>; <condition>; <increment>)一样,你只是省略了初始条件和增量。在这种情况下,条件将始终被视为真实。

0

其在谷歌中的第一项,如果你有兴趣我GOOGLE C#为;; 并得到该链接http://msdn.microsoft.com/en-us/library/ch45axte.aspx 单击C#和MSDN指出:

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

为(;) { // ... }

1

是的,它是一个无限循环。

for语句中的所有参数都是可选的,条件默认为true,所以它的一样:

for (;true;) 

或:

while (true) 
0

一个正常的循环有这些元素

for (for-initializer ; for-condition ; for-iterator) embedded-statement 

例如

for(int i = 0 ; i < 10 ; i++) { 
    foo(); 
} 

所有这些元素都可以省略,你留下了for(;;),这是一个无限循环。

C#语言specification特别指出

如果换条件从 for语句省略,那么 明确赋值进行评价,如同 for条件均与上述真 取代扩张。

所以,for(;;)相同for(;true;)

2

我只想澄清:

;;是不是一个特殊的运算符或东西 - 它是一个普通的for循环。

定期for循环看起来像这样:

for (do_before_loop**;** finish_loop_when_this_condition_is_false**;** do_after_each_iteration);

,如果你把所有3个部分清空你;; - 因为你不具备退出条件 - 这是一个无限循环。

3

通常你写你的循环是这样的:

for (int i = 0; i < 10; i++) 
{ 
// The rest of the application's code 
} 

现在,当你希望你的循环是无限的,你只需要删除“INT I = 0”,条件“我< 10” ,并增加“i ++”。如果你这样做,那么在一个for语句中你只会看到“;;”

for (;;) 
{ 
// The rest of the application's code 
} 
+1

技术上,用于循环至是无限的,所有必须删除是条件(i <10)。 – 2016-12-03 13:30:34

0

这是一个普通的使用无限循环的。 我们使用这个循环的情况下,我们不知道我们需要多少次执行循环内的代码。因此我们需要定义一个条件来摆脱这个循环。 这里是从服务器接收长消息的一个例子:

for (;;) 
{ 
    //Receive the maximum allowed size of the message 
    //Save(Concatenate) the received data in a variable (TotalReceivedData) 
    // If the length of the received part of the message is equal to zero , break the operation 
    //<Break the loop>if(message.length == 0){break;}</Break the loop> 
} 

在这里你可以使用存储在变量TotalReceivedData完整接收到的消息。

我添加了这个例子,因为我刚刚遇到过这样的情况。