【问题标题】:Nested If - ElseIf - Select Case嵌套 If - ElseIf - 选择案例
【发布时间】: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


【解决方案1】:

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

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

和往常一样,如果你想知道什么表现更好,试试看看。

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2015-08-16
    • 2017-09-09
    • 1970-01-01
    • 2020-12-13
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多