在VB.NET中选择Case Fall through with Not Condition

时间:2011-03-23 08:27:13

标签: vb.net switch-statement conditional-statements select-case

如何在下面的选择案例中添加Not条件。

是<>适用于单个值,“To”适用于Range,但值是特定值,不存在一系列数字。在这种情况下是否可以使用select case,或者我必须切换到if-else。例如:我不希望在值为0和3时执行大写

           Select value
             case 0,1,2,3
           End Select

3 个答案:

答案 0 :(得分:11)

我不确定我理解这个问题......

为什么不能像这样编写示例代码:

Select Case value
    Case 1, 2
        DoWork()
End Select

value = 0value = 3时无法执行任何操作。提供给Case语句的一系列值不必是顺序的。


更新以回复评论:

我会这样写,利用Case Else标签:

Select Case myComboBox.SelectedIndex
    Case 1, 5, 8
        'The suggestion is acceptable, so process it
        DoWork()
    Case Else
        'The suggestion is invalid, so show an error
        MessageBox.Show("You cannot select that option. " & _
                        "Please choose options 1, 5, or 8 instead.", _
                        "Invalid Selection", _
                        MessageBoxButtons.OK, MessageBoxIcon.Error)
End Select

当然,如果在用户选择正确的值的情况下实际上没有任何“工作”要做,那么使用Select Case似乎没什么意义声明。基本规则应该是使用哪个使您的代码最清晰并且最容易理解。对Select CaseIf语句更快的怀疑几乎没有效果 - 编译器足够聪明,几乎在所有情况下都能产生几乎相同的结果。

答案 1 :(得分:1)

根据Cody所写的内容,我会选择:

Select Case value
    Case 1, 2
        DoWork()
    Case 0 ,3               
        'nothing to do, only log if needed
    Case Else
        Debug.Fail("Please provide a logical path for all possible values")
End Select

额外的分支只是为了澄清代码的意图并防范未来的变化。

答案 2 :(得分:0)

我经常将SELECT / CASE与IF / END IF结合起来。第一个捕获范围,然后第二个用范围做类似的事情,但可能差别很小。

    Dim Result As Integer = 1
    Select Case Result
        Case 0 To 3
            SaveOrder()
            '0 to 3 is success 
            If Result <> 0 AndAlso Result <> 3 Then
                '1 and 2 = Everything ok
                SendCustomerMesage(0)
            Else
                '0 and 3 = Order OK, but no stock in storage
                SendCustomerMesage(1)
            End If

        Case 4 To 8
            '4 to 8 is error 
            InformCustomer(value)
        Case Else
            HandleError(value)
    End Select