如何在以下选择案例中添加 Not 条件。
Is <> 适用于单个值,而“To”适用于 Range,但该值是特定值,没有数字序列。在这种情况下是否可以使用选择案例,或者我是否必须切换到 if-else。例如:我不想在值为 0 和 3 时执行 case
Select value
case 0,1,2,3
End Select
如何在以下选择案例中添加 Not 条件。
Is <> 适用于单个值,而“To”适用于 Range,但该值是特定值,没有数字序列。在这种情况下是否可以使用选择案例,或者我是否必须切换到 if-else。例如:我不想在值为 0 和 3 时执行 case
Select value
case 0,1,2,3
End Select
我不确定我是否理解这个问题......
为什么不能像这样编写示例代码:
Select Case value
Case 1, 2
DoWork()
End Select
value = 0
当或时,什么都不会被执行value = 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 Case
比语句更快的怀疑几乎没有道理If
——编译器足够聪明,几乎可以在每种情况下产生几乎相同的结果。
在科迪写的基础上,我会选择:
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
额外的分支只是为了阐明代码的意图并防止将来发生变化。
我经常将 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