2014-02-07 54 views
3

我在工作任務改寫舊的VB代碼到C#和我碰到這個嵌套和非嵌套else/else ifs之間有區別嗎?

If (termNumber = TermNumberCode.FallWinter) Then 
    Dim first_term As String = " ((Course.dbo.CourseList.[Year])[email protected]) AND ((Course.dbo.CourseList.TermNumber)=3) " 

    Dim second_term As String = " ((Course.dbo.CourseList.Year)[email protected]+1) AND ((Course.dbo.CourseList.TermNumber)=1) " 
    query &= " AND ((" & first_term & ") OR (" & second_term & ")) " 

Else 
    If (termNumber = TermNumberCode.Summer) Then 
     query &= " AND ((Course.dbo.CourseList.[Year])[email protected]) AND ((Course.dbo.CourseList.TermNumber)=2) " 

    ElseIf (termNumber = TermNumberCode.Fall) Then 
     query &= " AND ((Course.dbo.CourseList.[Year])[email protected]) AND ((Course.dbo.CourseList.TermNumber)=3) " 

    ElseIf (termNumber = TermNumberCode.Winter) Then 
     query &= " AND ((Course.dbo.CourseList.[Year])[email protected]) AND ((Course.dbo.CourseList.TermNumber)=1) " 

    End If 
End If 

我想知道,這是一樣的這樣寫,或是否有任何特殊的意義或嵌套如果那樣?

If (termNumber = TermNumberCode.FallWinter) Then 
    code... 

Else if (termNumber = TermNumberCode.Summer) 
    code... 

Else If (termNumber = TermNumberCode.Fall) 
    code... 

Else //(termNumber = TermNumberCode.Winter) 
    code... 
+1

你有沒有想過要轉向「選擇案例」? – OneFineDay

回答

3

形式

if #1..  
else 
    if #2.. 
    else if #3.. 
    else .. 
end 

相當於

if #1.. 
else if #2.. 
else if #3.. 
else .. 

即,else內立即嵌套不影響嵌套分支的邏輯。這可以無限重複 - 雖然非嵌套形式在這裏可以更清楚地說明。

然而,所呈現的代碼else和最終else if被調換,不會有所作爲如果 termNumber如果限制在一套針對檢查。但它的區別 - 如果termNumber是TermNumberCode.SpringBreak? - 因此它必須與上述轉換分開考慮。

+0

謝謝,這很有道理。 – 173901

+0

@ 173901很酷:)使用「動態查詢」參數的好工作!許多程序員將這些值直接嵌入到SQL字符串中.. yech!您可以繼續這種分離以使動態查詢更簡單 - 例如對於單個術語,只需要綁定到termNumber。 – user2864740

1

它們在功能上是相同的。

+1

只是因爲這個帖子很可能被標記爲低質量,你能詳細說明你的意思嗎?四個詞的答案通常更好留下作爲評論。 – KyleMit

+2

@KyleMit這是一個問題的答案。它是完整的。沒有什麼可以真正解釋的;這樣做只會是噪音。另外兩個答案只是說這個,然後繼續談論那些根本不在問題中的東西,只是模糊了實際的答案。有些問題只是簡單的答案。 – Servy

+0

夠公平的。它出現在審查隊列中,初看起來它可能會使用額外的信息。如果我穿着OP的鞋子,它不會讓我相信任何事情。 OP是否知道這意味着什麼是「功能相同」?聲明這個*會回答這個問題,但我仍然不知道爲什麼*。 – KyleMit

2

假設您在內部If/End If以外沒有任何代碼,則它們實際上是等效的。

1

這種等效性在C風格語言中更容易看出。在這些語言中沒有「else if」關鍵字 - 這只是「else」和「if」的格式組合。換句話說,只要你在空白不重要的語言中有「if」和「else」,你總是會得到「else if」。

但是在VB中有一個「ElseIf」關鍵字,並且你有所有這些「End If」語句,所以它不僅僅是一個空白的重新排列。但是你仍然有「Else
If」和「ElseIf」之間的等價關係。

0

VB.NET有兩種風格的if和else語法。第一種風格的第一種說法是緊跟在ThenElse之後,沒有介入的冒號或行結束。條件的影響將延伸到行的末尾。這種風格不允許使用End If

第二種樣式的行結束或冒號緊跟在ThenElse之後。在這種風格下,條件會影響所有內容,直到下一個Else,ElseIfEnd If。請注意,在這種風格中,行尾不重要;可以在一行中包括多個Then,Else,ElseIfEnd If聲明。

爲了避免解析混淆,某些風格的組合被禁止。特別地,第二風格的沒有If,Then,ElseIfElse可以由第一風格的If控制,並且任何Else必須使用與其匹配的Then相同的風格。ElseIf關鍵字旨在解決這些限制,因爲它被視爲第二種類型If/Then結構的一部分,而不是第一種類型的Else。請注意,可以使用第二種構造編寫Else : If ... Then,但ThenElse需要單獨的End If聲明。此外,請注意,如果使用第一個if/then樣式並且包含If作爲Else的第一個語句,則需要ElseIf之間的空格。