在VB.NET中我为什么要使用Select而不是If?

Way*_*ner 3 vb.net select language-features if-statement

我刚毕业并开始了一份真正的工作.在我们的培训中,他们向我们展示了VB.NET以及他们在这里使用的许多功能.在一些例子中,他们使用了Select语句(在一些地方,它们被用于If/Else真正应该使用的地方).

我在其他语言中使用switch/select语句的唯一一次(除了需要它的赋值)是我想要进入下一个语句的时候.

鉴于VB.NET没有通过,有什么(如果有的话)使用该Select声明?在它提供优势和If/ElseIf陈述时是否有任何情况?

GSe*_*erg 10

Select Case不只是Select.
对我来说,这是该语言的最佳功能之一.

  1. 当你有几个可能的值来测试时,它会更直观.

    select case some_var
    case 1
      something()
    case 2
      something_else()
    case 3
      etc()
    end select
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在测试范围时,它更具可读性:

    select case some_var
    case 1 to 10
      something()
    case 20 to 30
      something_else()
    case is > 100
      etc()
    end select
    
    Run Code Online (Sandbox Code Playgroud)
  3. 当你有一堆更复杂的条件要测试时,它更具可读性,确保只选择一个:

    select case true
    case string.isnullorempty(a_string)
      something()
    case a_string.length < 5
      something_else()
    case a_string = b_string
      etc()
    end select
    
    Run Code Online (Sandbox Code Playgroud)
  4. 它优于C/C++ switch,因为它允许表达式作为分支点,而不仅仅是常量.

  5. 当使用常量作为分支点(示例1)时,编译器能够使用直接跳转生成更优化的代码.

  • 我完全没有意识到你可以测试范围,以及"Select Case"的一些好的参数 (2认同)

Joe*_*orn 6

Select告诉编译器,类似的If/Else块集中的每个比较(If)都在相同的值上,这使得它可以进行某些更难以确定的优化.例如,它可能更渴望生成在cpu寄存器中保存该值的机器代码(这只是假设...不同的编译器可以做他们想要的事情).

此外,我们中的一些人发现Select更具可读性.遵循您自己找到的任何团队或单位的编码标准非常重要.