2010-07-30 38 views
45

我在C#中遇到以下代碼。如果語句存在於C#中嗎?

if(condition0) statement0; 
else if(condition1) statement1; 
else if(condition2) statement2; 
else if(condition3) statement3; 
... 
else if(conditionN) statementN; 
else lastStatement; 

有些同事告訴我,這是一條else if聲明。不過,我確信它實際上是一個多層嵌套的if-else聲明。我知道,如果沒有分隔符{},則可以在ifelse中聲明一條語句。所以在這種情況下,我認爲它將等同於下面的代碼。

if(condition0) 
    statement0; 
else 
    if(condition1) 
    statement1; 
    else 
    if(condition2) 
     statement2; 
    else 
     if(condition3) 
     statement3; 
     else 
     ... 

請注意,我改變的只是空白。 由於每個else在沒有分隔符時都會返回到最近的if語句,因此此縮進可行。

任何人都可以澄清,如果第一個例子中的else if格式與第二個例子中嵌套的if-else格式不同,編譯器會對其進行處理嗎?

+7

看起來像'switch'的好例子:) – 2010-07-30 20:00:12

+4

@Russ ha!好雙關! – NickAldwin 2010-07-30 20:00:39

+1

[語言規範](http://msdn.microsoft.com/en-us/vcsharp/aa336809.aspx)會在短時間內清除它。你是對的,但它看起來有點像一個肚臍眼,但它根本沒有實際意義:) – shambulator 2010-07-30 20:12:40

回答

75

你是對的;在C#中不存在「else if」語句。這只是另一方面,替代條款的陳述本身就是一種陳述。

當然,IDE將「else if」視爲特別的,以便獲得您期望的良好格式。

請注意,#elif在「預處理器」語法中的構造。

還要注意,C,C++和ECMAScript--我相信還有更多的類C語言 - 也有沒有正式的「else if」語句的屬性。相反,在每一個行爲都落在「其他」的定義之前,就像在一個陳述之前。

3

這是一個多層次的if-else。

它的原因與c#語法規則有關。一個else後跟一個聲明,並且任何if鏈都有資格作爲聲明。

2

C#中沒有「else if」語句。

對於這個問題,我不知道在C#中有任何多詞語句關鍵字。

+11

收益率回報。產量突破。 – 2010-07-30 20:03:02

+0

嗯,這就是說'foreach..in'是一個多詞關鍵字,儘管分開了一點。 – 2010-07-30 20:03:50

+1

'yield return'將是一個多詞語句關鍵字。就像'foreach(... in ...)'一樣,這取決於你想解釋這個短語的鬆散程度。 – cHao 2010-07-30 20:05:44

2

你是對的。這只是一個else,然後是if

3

C# specification中從未提及構造else if,除了在一些沒有解釋的情況下使用它的例子。所以我不認爲它是一個特殊的構造,它只是嵌套的if語句。

+1

它也沒有在關鍵字表中列出(第2.4.3節),它是什麼構成關鍵詞標記的正式定義。這對我來說已經足夠了,但要進一步說明:關鍵字被描述爲「類似標識符的字符序列」;標識符的規範不允許使用空格字符。由於「else if」至少包含一個空格字符,所以我會說它不是「一個類似標識符的字符序列」。 – 2010-07-30 21:20:40

+0

@Dr。 Wily:同樣的方式,「yield return」不是根據規範的關鍵字。但它仍然有意義。 – configurator 2011-03-23 01:58:10

1

要在@獵人的答案擴大的原因,因爲你打就可以了,如果沒有括號只會執行下一行,如果它是一堆嵌套的人會需要括號:

if(condition0) 
    statement0; 
else 
{ 
    if(condition1) 
    statement1; 
    else 
    { 
    if(condition2) 
     statement2; 
    else 
    { 
     if(condition3) 
     statement3; 
     else 
     ... 
    } 
    } 
} 
+0

向解釋方括號的方向投票,這是他認爲正在發生的事情? – 2010-07-30 20:16:26

+0

問題是,如果*是一個嵌套的if-else結構,並且實際上並不需要方括號(並不是說如果實際用新行+縮進樣式編寫的話,它們不會被鼓勵)。括號不是*行*,它們是關於*語句*的。在這種情況下,聲明是另一個* if *。 – 2010-07-30 20:19:14

+0

完全同意,我更明確地說出他原來的想法是不正確的,如果他認爲這需要我寫的。 – 2010-07-30 20:42:48

1

的C#語言規範的Selection Statement僅顯示ifswitch語句。如果您選擇if語句,它會顯示:

if語句根據布爾表達式的值選擇要執行的語句。

if語句:

如果(布爾表達式)嵌入語句

如果(布爾表達式)嵌入語句別的嵌入語句 布爾表達式: 表達

的否則部分與詞彙上最接近的前面相關(如果語法允許的話)

1

這兩個例子你給的每種語言都是相同的。在C或C#中,它完全等價於一個else,那麼if。在其他一些語言中,elseif是語法糖,否則,if。因此,無論您使用哪種語言,它們都會編譯爲相同的代碼(或者解釋爲相同的行爲)。請參閱http://en.wikipedia.org/wiki/Conditional_%28programming%29#Else_If

+1

通常,「else if」被編譯器/解釋器視爲兩個單獨的語句。帶有「else if」結構的語言通常使用單個單詞,如elseif或elif。 – 2010-07-30 20:10:47