我有一项工作要将旧的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...
答案 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有两种语法风格。第一种样式具有要在Then
或Else
之后立即控制的第一个语句,而没有插入的冒号或行尾。条件的效果将延伸到行尾。此样式不允许使用End If
。
第二种样式的行尾或冒号紧跟Then
或Else
。在此样式中,条件会影响所有内容,直到下一个Else
,ElseIf
或End If
。请注意,这种风格的线端并不重要;一个可以在一行中包含多个Then
,Else
,ElseIf
和End If
语句。
为避免解析混淆,禁止使用某些样式组合。特别是,第二种风格的If
,Then
,ElseIf
或Else
不能由第一种风格的If
控制,而且任何{ {1}}必须使用与其匹配的Else
相同的样式。 Then
关键字旨在解决这些限制,因为它被视为第二种ElseIf
/ If
构造的一部分,而不是第一种Then
}。请注意,可以使用第二种方式构造Else
,但Else : If ... Then
和End If
需要单独的Then
语句。另请注意,如果其中一个使用第一个if / then样式并且Else
包含If
作为Else
的第一个语句,则Else
和If
之间的空格为必需的。