嵌套 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 上比较这三种方法,但不确定结果。

你能告诉我正确的选择吗?

在这种情况下,您的 SelectIf 示例很可能会编译为相同的机器代码,具有完全相同的性能。

在任何情况下:不要担心像这样的微优化,除非您已经证明这是代码的问题部分。首先,写一些可读和可维护的东西。一种或另一种方式的性能差异可以忽略不计。

一如既往,如果您想知道哪种效果更好,试试看看。