Что такое VB.NET выберите логику оператора case с case или-ing?



Я использую или заявление в моем случае выражение.



хотя у меня есть значение в этом диапазоне, он не нашел совпадения. Почему бы и нет?



Пример Кода:



Select Case 2
Case 0
' Some logic

Case 1
' Some other logic

Case 2 Or 3
Console.WriteLine("hit")

End Select


с вышеизложенным я бы предположил, что hit будет напечатано, но это не тот случай.

750   5  

5 ответов:

использовать запятую для разделения операторов

Select Case 2
    Case 0,1,2,3
        Console.WriteLine("hit")
 End Select

Как Джаред сказал, что вам нужно использовать оператор запятой для разграничения операторов case.

на Or вы делали это побитово или, в результате чего он был "3". Забавно, что "2 и 3", вероятно, сработали бы для вашего конкретного случая.

JaredPar имеет право, но вы также можете использовать, чтобы построить

Select Case 2
    Case 0,1
    Case 2 To 3
        Console.WriteLine("Hit")
End Select

Это будет 0 или 1 ничего не делать, 2 или 3 печати хит...Построить-это диапазон...

вот MSDN

Edit: похоже, я был неправ, предполагая, что VB.NET не позволяет Case ORing. Я думал в C# и IL, и, похоже, я был неправ.

уточнения:


       2 binary = 0000 0010
       3 binary = 0000 0011
  2 Or 3 binary = 0000 0011 (= 3)

  Select Case 2
     Case 0            '--> no match

     Case 1            '--> no match

     Case 2 Or 3       '(equivalent to Case 3  --> no match)
   End Select

однако я чувствую, что должен указать, что ради производительности следует не используйте такие конструкции. Когда компилятор встречает инструкции Select (switch в C#), он попытается скомпилировать их с помощью таблиц поиска и переключатель MSIL инструкция, но в случае, когда у вас есть что-то вроде дело 1,2,11,55 компилятор не сможет преобразовать это в таблицу поиска, и ему придется использовать серию сравнений (что похоже на использование If.. Еще.)

дело в том, что для того, чтобы реально воспользоваться Выберите заявление, случаи должны быть разработаны с учетом этого. В противном случае единственным преимуществом является читаемость кода.

хорошо спроектированный коммутатор-это операция O(1), тогда как плохо спроектированный (что эквивалентно серии If..Затем..Операторы Else) - это операция O(n).

Это позволит вам выполнить "что-то "в случае 0," что-то еще "в случае 1," хит "в случае 2 или 3 или" хит еще " в противном случае.

Select Case 2
    Case 0
        Console.WriteLine("something")
    Case 1
        Console.WriteLine("something else")
    Case Is 2 To 3
        Console.WriteLine("hit")
    Else
        Console.WriteLine("hit else")
 End Select

Comments

    Ничего не найдено.