嵌套和非嵌套的else / else ifs之间有区别吗?

时间:2014-02-07 21:26:43

标签: c# vb.net if-statement

我有一项工作要将旧的vb代码重写为c#,我遇到了这个

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

    Dim second_term As String = " ((Course.dbo.CourseList.Year)=@TermYear+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])=@TermYear) AND ((Course.dbo.CourseList.TermNumber)=2)  "

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

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

    End If
End If 

我想知道,这是否与写这样或者是否有任何特殊意义或嵌套这样的ifs相同?

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

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

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

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

5 个答案:

答案 0 :(得分: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怎么办? - 因此必须与上述转变分开考虑。

答案 1 :(得分:2)

假设你没有内部If/End If以外的任何代码,那么它们实际上是等价的。

答案 2 :(得分:1)

它们功能相同。

答案 3 :(得分:1)

这种等价在C风格的语言中更容易看到。在这些语言中没有“else if”关键字 - 这只是“else”和“if”的格式化组合。换句话说,只要你在一个白色空间不重要的语言中有“if”和“else”,你就会得到“else if”。

在VB中,有一个“ElseIf”关键字,你有所有那些“End If”语句,所以它不仅仅是一个空格重排。但是你仍然在“Else
If”和“ElseIf”之间存在潜在的等价关系。

答案 4 :(得分:0)

VB.NET对if和else有两种语法风格。第一种样式具有要在ThenElse之后立即控制的第一个语句,而没有插入的冒号或行尾。条件的效果将延伸到行尾。此样式不允许使用End If

第二种样式的行尾或冒号紧跟ThenElse。在此样式中,条件会影响所有内容,直到下一个ElseElseIfEnd If。请注意,这种风格的线端并不重要;一个可以在一行中包含多个ThenElseElseIfEnd If语句。

为避免解析混淆,禁止使用某些样式组合。特别是,第二种风格的IfThenElseIfElse不能由第一种风格的If控制,而且任何{ {1}}必须使用与其匹配的Else相同的样式。 Then关键字旨在解决这些限制,因为它被视为第二种ElseIf / If构造的一部分,而不是第一种Then }。请注意,可以使用第二种方式构造Else,但Else : If ... ThenEnd If需要单独的Then语句。另请注意,如果其中一个使用第一个if / then样式并且Else包含If作为Else的第一个语句,则ElseIf之间的空格为必需的。