以下の選択したケースでNot条件を追加する方法。
<>は単一の値に対して機能し、「To」は範囲に対して機能しますが、値は特定の値であり、一連の数値はありません。このシナリオでselectcaseを使用することは可能ですか、それともif-elseに切り替える必要がありますか?例:値が0と3のときにcaseを実行したくない
Select value
case 0,1,2,3
End Select
以下の選択したケースでNot条件を追加する方法。
<>は単一の値に対して機能し、「To」は範囲に対して機能しますが、値は特定の値であり、一連の数値はありません。このシナリオでselectcaseを使用することは可能ですか、それとも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
。コンパイラは、ほぼすべてのケースで実質的に同等の結果を生成するのに十分なほどスマートです。
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
追加のブランチは、コードの意図を明確にし、将来の変更を防ぐためのものです。
私はよく SELECT/CASE を IF/END IF と組み合わせます。最初のものは範囲をキャッチし、次に 2 番目のものはその範囲で同様のことを行いますが、小さな違いがあるかもしれません。
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