【发布时间】:2015-11-19 19:45:02
【问题描述】:
我需要选择一种方法来编写一段重复次数非常多的代码,所以我希望它尽可能快。
这是我的代码(目前):
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 Case),如图所示:
使用 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 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)
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 上比较这三种方法,但不确定结果。
你能建议我正确的选择吗?
【问题讨论】:
-
我会使用一个函数,它根据您传递给它的
Col变量返回值。这将使这更具可读性。 -
您已经获得了代码,NET 有一个高分辨率秒表,只需在循环中执行每个操作并为它们计时(在发布模式下执行)。您可能希望将循环迭代器更改为 Int32/Integer。
-
@Plutonix 你是说使用
For Cel As Integer会使代码比使用For Cel As Short更快吗?
标签: vb.net if-statement select-case