4

以下の選択したケースでNot条件を追加する方法。

<>は単一の値に対して機能し、「To」は範囲に対して機能しますが、値は特定の値であり、一連の数値はありません。このシナリオでselectcaseを使用することは可能ですか、それともif-elseに切り替える必要がありますか?例:値が0と3のときにcaseを実行したくない

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

3 に答える 3

12

質問の意味がよくわかりません...

サンプル コードを次のように書けないのはなぜですか。

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。コンパイラは、ほぼすべてのケースで実質的に同等の結果を生成するのに十分なほどスマートです。

于 2011-03-23T08:51:02.473 に答える
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

追加のブランチは、コードの意図を明確にし、将来の変更を防ぐためのものです。

于 2011-03-23T08:58:42.837 に答える
0

私はよく 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
于 2011-03-23T09:44:24.277 に答える