繁体   English   中英

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

[英]Is there a difference between nested and non nested else/else ifs?

我有一个任务在于将旧的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...

表格

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怎么TermNumberCode.SpringBreak - 因此必须与上述转换分开考虑..

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

它们在功能上是相同的。

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

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

VB.NET有if和else两种语法。 第一种风格的第一个声明是紧跟在ThenElse ,没有插入的冒号或行尾。 条件的效果将延伸到行尾。 此样式不允许使用End If

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM