【问题标题】:Why should I use exit select?为什么要使用退出选择?
【发布时间】:2010-12-27 19:17:41
【问题描述】:

以下是我收集的关于退出选择的几个问题...

  1. 在 VB.NET 中使用退出选择是否有任何理由?
  2. 原因是否与性能有关?
  3. 退出选择是否等于break;

示例 1

Select case Name
case "Mary"
'...
case "John"
'...
case else

end select

示例 2

Select case Name
case "Mary"
'...
exit select

case "John"
'...
exit select

case else

end select

【问题讨论】:

    标签: vb.net select-case


    【解决方案1】:

    这与在类 C 语言中使用 break 关键字和 switch 语句不同。使用switch,如果您省略了中断控制,它将进入下一个案例。使用 Visual Basic Select,控制不会失败; break 已隐含。

    但是,您可以将其用作保护子句,以避免将代码嵌套在 if 块中的另一个级别。例如:

    Select Case SomeEnumVar
        Case SomeEnum.SomeValue1
             If Not SomeCondition Then Exit Select
             'Do something
        Case SomeEnum.SomeValue2
             'Do something else
        Case Else
             'Default case
    End Select
    

    这比等效的代码要好一点:

    Select Case SomeEnumVar
        Case SomeEnum.SomeValue1
             If SomeCondition Then
                 'Do something
             End If
        Case SomeEnum.SomeValue2
             'Do something else
        Case Else
             'Default case
    End Select
    

    与其他因素相比,这两个样本之间的任何性能差异几乎可以肯定是微不足道的。

    另一种用途是,如果您有很多案例,并且放置其中一个案例以便匹配意味着您想要停止检查所有其他案例。这已经发生了,所以你可能只有一个空的 case 语句。但是你也可以添加一个 Exit Select 来让维护者清楚你希望这个案例不会做任何其他事情。

    【讨论】:

    • 我真的觉得第二个例子比第一个更好,因为第二个是结构化的,而第一个不是。中断执行流程的指令(如 Goto、Exit 等)使代码解构。
    • @SoMoS:我喜欢在方法的开头使用保护子句来检查先决条件,但是在 Select Case 的中间,我倾向于同意你的观点,即第二个示例在大多数情况下更好.
    【解决方案2】:

    嗯...这就像使用 goto...一旦找到正确的案例,“退出”案例就没有用了,因为在 Visual Basic 中它会退出。 在 C# 中,您需要退出案例(在这种情况下,需要休息一下)。

    关键是你可以在案例范围的中间使用它,比如:

    Case 1
       Do something
       Do something
       Evaluate
          exit select
       Else
          Do something
    

    这很丑,但你可以这样做......

    【讨论】:

    • 确实如此,因此应该避免。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    相关资源
    最近更新 更多