[英]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两种语法。 第一种风格的第一个声明是紧跟在Then
或Else
,没有插入的冒号或行尾。 条件的效果将延伸到行尾。 此样式不允许使用End If
。
第二种样式的行尾或冒号紧跟在Then
或Else
。 在这种风格中,条件将影响所有内容,直到下一个Else
, ElseIf
或End If
。 请注意,这种风格的线端并不重要; 一个可以在一行中包含多个Then
, Else
, ElseIf
和End If
语句。
为避免解析混淆,禁止某些样式组合。 特别是,没有If
, Then
, ElseIf
,或Else
所述第二样式的可以由控制If
所述第一样式的,任何Else
必须使用相同的风格作为其匹配Then
。 ElseIf
关键字旨在解决这些限制,因为它被视为第二种类型的If
/ Then
结构的一部分,而不是第一种类型的Else
。 请注意,可以编写Else : If ... Then
使用第二种类型的构造,但Then
和Else
需要单独的End If
语句。 另外,请注意,如果使用第一个if / then样式并且包含If
作为Else
的第一个语句,则需要Else
和If
之间的空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.