2014-02-07 55 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之间的空格。