2011-01-05 55 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完整接收到的消息。

我添加了這個例子,因爲我剛剛遇到過這樣的情況。