Выберите случай провалиться с не условием в VB.NET - PullRequest
4 голосов
/ 23 марта 2011

Как добавить условие Not в приведенном ниже случае выбора.

Is <> работает для одного значения, а 'To' работает для диапазона, но значения являются конкретными значениями, а не являются последовательностями чисел.Можно ли использовать регистр выбора в этом сценарии, или мне нужно переключиться на if-else.Пример: я не хочу, чтобы регистр выполнялся, когда значение равно 0 и 3

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

Ответы [ 3 ]

11 голосов
/ 23 марта 2011

Я не уверен, что понимаю вопрос ...

Почему вы не можете просто написать пример кода следующим образом:

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 - компилятор достаточно умен, чтобы выдавать практически эквивалентные результаты почти в каждом случае.

1 голос
/ 23 марта 2011

Основываясь на том, что написал Коди, я бы добавил:

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

Дополнительные ветви предназначены только для разъяснения цели кода и для защиты от будущих изменений.

0 голосов
/ 23 марта 2011

Я часто комбинирую 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
...