Что такое 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 будет напечатано, но это не тот случай.
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 печати хит...Построить-это диапазон...
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