【问题标题】:Is there a reason to prefer a switch over an if statement with only one condition?是否有理由更喜欢仅具有一个条件的 if 语句?
【发布时间】:2009-10-28 16:05:03
【问题描述】:

我在我团队的项目中发现了以下代码:

Public Shared Function isRemoteDisconnectMessage(ByRef m As Message)
    isRemoteDisconnectMessage = False
    Select Case (m.Msg)
        Case WM_WTSSESSION_CHANGE
            Select Case (m.WParam.ToInt32)
                Case WTS_REMOTE_DISCONNECT
                    isRemoteDisconnectMessage = True
            End Select
    End Select
End Function

不要介意函数没有返回类型(我可以轻松添加“As Boolean”);我想知道的是,有没有理由更喜欢上面的代码而不是下面的代码(对我来说,更具可读性)?

Public Shared Function isRemoteDisconnectMessage(ByRef m As Message) As Boolean
    Return m.Msg = WM_WTSSESSION_CHANGE AndAlso _
           m.WParam.ToInt32() = WTS_REMOTE_DISCONNECT
End Function

笼统地说:使用switch(或者,在这种情况下,Select Case)块——和/或嵌套块——来测试单个条件是否有意义?这可能比简单的if 更快吗?

【问题讨论】:

    标签: switch-statement if-statement sql


    【解决方案1】:

    如果您担心性能...简介。否则你不会在可读性方面犯错......

    【讨论】:

    • 哇,我在一年前问过这个问题。现在看起来像一个非常愚蠢的问题。好吧,只是做一些超迟到的答案接受......
    【解决方案2】:

    我认为它在速度方面实际上并不重要,编译器应该能够优化它。

    我认为这只是一个偏好问题。

    【讨论】:

      【解决方案3】:

      我的经验法则是当 if/else 条件的数量大于三个时使用 switch 语句。除了可读性/可维护性似乎随着 if/else 条件数量的增加而降低之外,我没有任何数据说明为什么这样做有意义。

      【讨论】:

        【解决方案4】:

        我认为您给出的具体情况的答案是否定的 - 这没有意义,正如其他答案中所建议的那样,人们希望编译器会优化掉任何实际差异。

        我会在这方面投入资金,因为它需要进行一些剪切、粘贴和删除编码 - 采用一组通用的嵌套 case 语句并提取一个位,从而为您提供所需的是/否结果。

        如果这是类似的内联内容和/或有一个设置了返回标志的函数调用,那么人们可能会开始证明它是合理的,但事实并非如此。

        p>

        【讨论】:

          猜你喜欢
          • 2015-07-06
          • 2011-03-18
          • 2020-10-23
          • 1970-01-01
          • 2011-06-18
          • 2010-12-28
          • 2014-10-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多