2017-02-06 29 views
2

我目前正在學習條件結構。糾正我,如果我錯了,但如果別人和else(如果(){})是同樣的事情...例如:C#else if confusion

a=5; 
if(a==6) 
{ 
    Console.WriteLine("Variable 'a' is 6"); 
} 
else if(a==5) 
{ 
    Console.WriteLine("Variable 'a' is 5"); 
} 

而且

a=5; 
if(a==6) 
{ 
    Console.WriteLine("Variable 'a' is 6"); 
} 
else 
{ 
    if(a==5) 
    { 
     Console.WriteLine("Variable 'a' is 5"); 
    } 
} 

這些東西是一樣的嗎?如果是的話,如果我能寫成「第二種方式」(我寫的第二個例子),爲什麼還存在?

+0

不,他們不一樣。它們在你的例子中有相同的效果,但是如果你還有其他的條件呢? – TZHX

+0

@TZHX我必須寫另一個{if(){}}?或者我不能有2個elses我可以嗎? – peter

+0

@peter:那會是什麼樣子?如果你添加了更多的條件,它會是什麼樣子? – David

回答

5

是的,這些實際上是相同的。

「else if」語句存在的原因是當有許多條件需要測試時,使代碼更乾淨。例如:

if (a==b) { 
    //blah 
} else if (a==c) { 
    //blah 
} else if (a==d) { 
    //blah 
} else if (a==e) { 
    //blah 
} 

比嵌套方式

if (a==b) { 
    //blah 
} else {  
    if (a==c) { 
     //blah 
    } else { 
     if (a==d) { 
      //blah 
     } else { 
      if (a==e) { 
       //blah 
      } 
     } 
    } 
} 
+0

雖然說實話,這種情況是'switch'的用途。 – Andrew

+3

你不能總是使用開關盒 - 就像在我的例子中,c,d和e是變量,而不是常量,所以你不能在case語句中使用它們。 – Tim

+0

@Tim好吧,但我不能添加所有這些ifs只有一個其他建設嗎? (a == d){ } else if(a == c){ // blah} if(a == d){ // if(a == b){if如果(a == e){ // blah } }' – peter

3

乾淨多了,爲什麼else if存在

事實並非如此。它本身不是關鍵字或構造。你的兩個例子是相同的,只不過在第二種情況下你已經在代碼中添加了一些多餘的大括號和空格。

ifelse後面都緊跟着一條語句。在你的第一個例子以下的else的說法是:

if(a==5) 
{ 
    Console.WriteLine("Variable 'a' is 5"); 
} 

第二個例子只是包裝在大括號相同的語句,並在開始添加新的線條。新行被忽略,所以它不會改變語義,並且由於代碼是已經有一個語句,將它包裝在花括號中並不會以任何方式改變它。

+0

ohhhhhhhhhhhhh現在我明白了......所以基本上「其他如果」只是使用優勢,你不需要使用大括號,如果它是一條線?那麼爲什麼{if(){}} == else else? – peter

0

大多數情況下,它使代碼更清晰,更易於閱讀,更好地進行縮進,特別是如果您對字符行長度有任何約定(並且如果不這樣做,那麼在大if語句中有三十個縮進,這樣的痛苦閱讀)。它還節省了空間,一些額外的字符和縮進數千行可能並不多,但爲什麼使用它,如果你不需要。當代碼編譯時,它們在DLL中幾乎完全相同。

2

嚴格來說,沒有像else if聲明那樣的東西。 「else if」實際上實際上只是一個單線體的else,恰好是一個完全獨立的if聲明的開始。你可以想像它是這樣的:

var a = 5; 

// This if uses a single line 
if (a == 6) DoSomething(); 
// This else is a single line that is also a single-line if 
else if (a == 4) DoAnotherThing(); 
// This else uses a single line as well, but is referring instead to the second if 
else DoSomethingElse(); 

上述腳本等同於以下內容:

if (a == 6) 
{ 
    DoSomething(); 
} 
else 
{ 
    if (a == 4) 
    { 
     DoAnotherThing(); 
    } 
    else 
    { 
     DoSomethingElse(); 
    } 
} 

甚至這樣的:

if (a == 6) 
    DoSomething(); 
else 
    if (a == 4) 
     DoAnotherThing(); 
    else 
     DoSomethingElse(); 

它寫成else if這樣的原因通常是因爲它支持代碼的邏輯流程。那,它看起來更漂亮。

+0

最後的陳述應該改寫爲「DoSomethingCompletelyDifferent」 - 開個玩笑:o) –