嵌套 If - ElseIf - Select 大小写
Nested If - ElseIf - Select Case
我需要选择一种方法来编写一段会重复很多的代码,所以我希望它尽可能快。
这是我的代码(目前):
For Cel As Short = 0 To Cels - 1
Rw = Int(Cel / 3) + 1
Col = Cel - ((Rw - 1) * 3) + 1
RifTxt = TabW(RifTW("Pi")).Cells(Cel)
If Col = 1 Then
RowArr(Col) = RifTxt
Else
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
If Col = 3 Then
RowArr(3) = Rw
Pi_W.Rows.Add (RowArr)
End If
End If
Next Cel
我想改变它(使用 ElseIf 或 Select 大小写),如图所示:
使用 ElseIf
For Cel As Short = 0 To Cels - 1
Rw = Int(Cel / 3) + 1
Col = Cel - ((Rw - 1) * 3) + 1
RifTxt = TabW(RifTW("Pi")).Cells(Cel)
If Col = 1 Then
RowArr(Col) = RifTxt
ElseIf Col = 2
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
ElseIf Col = 3 Then
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
RowArr(3) = Rw
Pi_W.Rows.Add (RowArr)
End If
Next Cel
或使用Select案例:
For Cel As Short = 0 To Cels - 1
Rw = Int(Cel / 3) + 1
Col = Cel - ((Rw - 1) * 3) + 1
RifTxt = TabW(RifTW("Pi")).Cells(Cel)
Select Case Col
Case is = 1 Then
RowArr(Col) = RifTxt
Case is = 2
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
Case is = 3 Then
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
RowArr(3) = Rw
Pi_W.Rows.Add (RowArr)
End Select
Next Cel
我尝试在 .netFiddle 上比较这三种方法,但不确定结果。
你能告诉我正确的选择吗?
在这种情况下,您的 Select
和 If
示例很可能会编译为相同的机器代码,具有完全相同的性能。
在任何情况下:不要担心像这样的微优化,除非您已经证明这是代码的问题部分。首先,写一些可读和可维护的东西。一种或另一种方式的性能差异可以忽略不计。
一如既往,如果您想知道哪种效果更好,试试看看。
我需要选择一种方法来编写一段会重复很多的代码,所以我希望它尽可能快。
这是我的代码(目前):
For Cel As Short = 0 To Cels - 1
Rw = Int(Cel / 3) + 1
Col = Cel - ((Rw - 1) * 3) + 1
RifTxt = TabW(RifTW("Pi")).Cells(Cel)
If Col = 1 Then
RowArr(Col) = RifTxt
Else
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
If Col = 3 Then
RowArr(3) = Rw
Pi_W.Rows.Add (RowArr)
End If
End If
Next Cel
我想改变它(使用 ElseIf 或 Select 大小写),如图所示:
使用 ElseIf
For Cel As Short = 0 To Cels - 1
Rw = Int(Cel / 3) + 1
Col = Cel - ((Rw - 1) * 3) + 1
RifTxt = TabW(RifTW("Pi")).Cells(Cel)
If Col = 1 Then
RowArr(Col) = RifTxt
ElseIf Col = 2
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
ElseIf Col = 3 Then
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
RowArr(3) = Rw
Pi_W.Rows.Add (RowArr)
End If
Next Cel
或使用Select案例:
For Cel As Short = 0 To Cels - 1
Rw = Int(Cel / 3) + 1
Col = Cel - ((Rw - 1) * 3) + 1
RifTxt = TabW(RifTW("Pi")).Cells(Cel)
Select Case Col
Case is = 1 Then
RowArr(Col) = RifTxt
Case is = 2
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
Case is = 3 Then
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
RowArr(3) = Rw
Pi_W.Rows.Add (RowArr)
End Select
Next Cel
我尝试在 .netFiddle 上比较这三种方法,但不确定结果。
你能告诉我正确的选择吗?
在这种情况下,您的 Select
和 If
示例很可能会编译为相同的机器代码,具有完全相同的性能。
在任何情况下:不要担心像这样的微优化,除非您已经证明这是代码的问题部分。首先,写一些可读和可维护的东西。一种或另一种方式的性能差异可以忽略不计。
一如既往,如果您想知道哪种效果更好,试试看看。