Оператор Select … Case
VBAимеет условный оператор перехода для использования в случаях, когда необходимо выбирать из большого количества различных ветвей кода: операторSelect Case(с его помощью очень удобно реализовывать структуру множественного выбора). Он работает во многом так же, как множество независимых операторовIf, но он более понятен для того, кто пишет код, и того, кто читает этот код. Этот оператор более эффективен, чем операторIf…Then…Else.
Ключевые слова Select Case используются со многими операторамиCase, где каждый операторCase проверяет появление другого условия и выполняется только одна из ветвейCase. ВетвьCase может содержать один, несколько или ни одного оператораVBA.
Select
Case – управляющий оператор, выполняющий
один из нескольких блоков операторов
в зависимости от значения выражения.
Select Case Выражение_выбора
[ Case Список_выражений_1
[Блок_операторов_1]
[Case Список_выражений_2 ]
[Блок_операторов_2]]
……………………………………………………………………………
[Case Else
[Блок_операторов_N]]
End Select
– Выражение_выбора – любое числовое или символьное выражение;
– Список_выражений – каждый из списков представляет собой список логических выражений, отделенных запятыми; имеют тот же тип, что и выражение_выбора;
– Блок_операторов – содержит любое количество операторов VBA.
При выполнении оператора Select Case VBA
сначала оценивает Выражение_выбора, а затем сравнивает
результат этого выражения с каждым
выражением, перечисленным в каждом
Списке_выражений. Если значение,
представленное с помощью Выражение_выбора совпадает с выражением
в Списке_выражений для одного из Case, VBA
выполняет Блок_операторов
для этого предложения Case.
Если значение
Выражение_выбора совпадает более, чем
с одним оператором Case, VBA
выполняет только операторы в
первом совпадающем
предложении Case. Часто Выражение_выбора
– это просто имя одной
переменной, математическое или численное,
а не логическое выражение. Выражения в
Списке_выражений – это обычно
логические выражения.
После завершения выполнения операторов в первом совпадающем операторе Case VBA продолжает выполнение кода с первого оператора после ключевых слов End Select, которые обозначают конец Select Case.
Если значение Выражение_выбора не совпадает ни с каким из Case, а необязательный Case
Обычно используется для обработки
нежелательных значений. Действие
оператора Select Case поясняется блок-схемой, приведенной на
рис. 5.Рис 5. Блок-схема конструкции Select Case
Элементы Списка _ выражений должны иметь одну из следующих трех форм:
Выражение_1,Выражение_2, …, Выражение_N
Выражение Тo Выражение
Is Выражение с операцией
– Выражение_ – любое числовое, символьное или логическое выражение того же типа, что и выражение выбора;
– Выражение с операцией – выражение, содержащее любую из следующих операций: <, <=, >, >=, < >, =.
Если
используется ключевое слово Тo для определения пределов выражения, то
меньшее значение должно быть первым.
Например, операторы блока Case
-1 To -5 не
выполняются, если Выражение
_ выбора
равно -4. Эта строка должна быть написана
как Case
-5 To -1.
Операции сравнения можно использовать только с ключевым словом Is, за исключением операции равенства. При отсутствии ключа Is в нужном месте интеллектуальный редактор вставит его.
Можно использовать несколько выражений или пределов в каждом условии Case. Например, Case 1 TO 4, 7 TO 9, 11, 13, Is > n %.
Пример 4. Программа, рассчитывающая скидку в зависимости от суммы покупки.
Sub skidka()
‘ Определение скидки (в %) в зависимости от
‘ количества продаваемого товара
Dim skidka As Integer
Dim summa As Single
summa = InputBox(«Введите сумму покупки», «Расчет скидки», 0)
If summa > 0 Then
Select Case summa
Case Is > 1000
skidka = 10
Case Is > 500
skidka = 5
Case Else
skidka = 0
End Select
MsgBox «Скидка» & skidka & «%»
Else
MsgBox «Сумма покупки не указана»
End If
End Sub
VB.
NET Select… Оператор Case эквивалентен в C#спросил
Изменено 4 года, 11 месяцев назад
Просмотрено 34к раз
Я только начал использовать C#, и у меня есть пара проблем. Есть ли способ закодировать C#-эквивалент оператора VB.NET Select, как показано ниже?
Выбрать Object.Name.ToString()
Дело "Имя1"
'Сделай что-нибудь
Кейс "Имя2"
'Сделай что-нибудь еще
Дело еще
'Выполнить действие по умолчанию
Конец выбора
Любая помощь будет принята с благодарностью.
Спасибо за ввод, а теперь что, если я привяжу несколько элементов управления к одному обработчику событий, как показано ниже, и захочу выполнить немного другое действие для каждого элемента управления:
Private Sub Button_Click(sender as Object, e as EventArgs) _ Обрабатывает button1.Click, Button2.Click 'заниматься общей деятельностью Выберите CType (отправитель, кнопка). Имя Кейс button1.Name 'сделай что-нибудь Кейс button2.Name сделать что-нибудь еще Дело еще 'выполнить действие по умолчанию Конец выбора Конец сабвуфера
Есть ли какой-нибудь способ сделать приведенный выше оператор выбора в C# без использования вложенных операторов if?
- c#
- vb.net
- vb.net-to-c#
1
Со временем я обнаружил, что некоторые конструкции VB.NET Select...Case неприменимы в C#, и единственный выход — написать много операторов if.
Например, в VB.NET вы можете написать:
Dim num as Integer = 5
Выберите номер дела
Случай с 1 по 10
'сделай что-нибудь
Случай с 11 по 20
сделать еще одну вещь
Дело еще
'сделать по умолчанию
Конец выбора
Но в C# нет конструкции switch , позволяющей делать что-то подобное.
Вам придется кодировать в кольцевой развязке так:
int num = 5;
переключатель (число)
{
Дело 1:
случай 2:
случай 3:
случай 4:
случай 5:
случай 6:
случай 7:
случай 8:
случай 9:
случай 10:
//сделай что-нибудь
перерыв;
случай 11:
случай 12:
случай 13:
случай 14:
случай 15:
случай 16:
случай 17:
случай 18:
случай 19:
случай 20:
// сделать что-то еще
перерыв;
по умолчанию:
// делаем по умолчанию
перерыв;
}
Или, если вы работаете с Double или любым типом, состоящим из непрерывных, а не дискретных значений, вам придется использовать , если s, чтобы получить требуемое действие.
Причина? Переключатель C# требует констант для различных case s. Это отличается от VB.NET Select Case , который позволяет записывать диапазоны.
2
Вам нужен оператор switch.
..
переключатель (Object.Name.ToString())
{
случай "Имя1":
//Сделай что-нибудь
перерыв;
по умолчанию:
//по умолчанию
перерыв;
}
Обратите внимание, что перерывы являются импортными, иначе программа пропустит ваши дела. Вы сможете найти это практически в любом введении в C#...
2
Используйте оператор switch .
переключатель (object.Name.ToString()) {
случай "Имя1":
перерыв;
//Сделай что-нибудь
случай "Имя2":
перерыв;
// Делаем что-то еще
по умолчанию:
перерыв;
// Делаем действие по умолчанию
}
И не забывайте, что существует бесплатный онлайн-инструмент преобразования, который позволяет конвертировать VB.net в C# и наоборот.
В C# 7 переключатель был значительно улучшен , и теперь можно применять больше условий в случаях, хотя он все еще не такой «чистый», как версия VB. Например.
переключатель (examScore)
{
case int es когда es >= 90: класс = "A"; перерыв;
case int es когда es >= 80: класс = "B"; перерыв;
case int es когда es >= 70: класс = "C"; перерыв;
case int es когда es >= 60; класс = "Д"; перерыв;
по умолчанию: класс = "F"; перерыв;
}
Взято из / Ссылки:
- Переключатели C# против VB Case Statements
- https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/switch
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Оператор switch— выбор регистра для типа объекта в VB.
NETспросил
Изменено 10 лет, 3 месяца назад
Просмотрено 65 тысяч раз
Я не уверен, что это правильный C#, но, надеюсь, вы поняли идею. 🙂
переключатель (msg.GetType()) {
корпус Класс А:
// бла
корпус класса B:
// бла 2
корпус Класс C:
// бла 3
}
Как включить тип объекта, но с помощью VB.NET Select Case ?
Я знаю, что некоторые могут предложить использовать полиморфизм, но я использую иерархию небольших классов сообщений, так что в моем случае это не сработает.
- vb.net
- оператор switch
- select-case
В VB 2010 для проектов, предназначенных для .NET framework 4 и более поздних версий, теперь можно сделать следующее:
Select Case msg.GetType() Дело GetType(ClassA) Конец выбора
В более ранних версиях VB это не работало, потому что нельзя было сравнивать два типа на равенство. Вам нужно будет проверить, указывают ли они на одну и ту же ссылку, используя ключевое слово Is. Это невозможно сделать в Select Case, если только вы не используете свойство типа Name или FullName для сравнения, как предложил Майкл. Вы можете использовать комбинацию If и ElseIf:
Dim type = msg.GetType()
Если тип GetType (ClassA)
...
Тип ElseIf GetType (ClassB)
...
...
Конец, если
4
Ну, если вы настаиваете на использовании Select Case, вы всегда можете использовать:
Select Case True
Case TypeOf msg Is ClassA
' сделай что-нибудь '
Case TypeOf msg Is ClassB
'сделай что-нибудь еще'
Дело еще
' и так далее '
Конец выбора
Но я полагаю, что большинству людей нравится избегать подобных вещей.
If/ElseIf, вероятно, будет понятнее.
4
Это способ обработки событий щелчка Button1 и Button2 в одном и том же подразделе (я начинал как программист VB6, так что это хорошая замена VB6 для обработки управляющих массивов)
Private Sub Button1_Click(ByVal sender As System. Объект, _
ByVal e As System.EventArgs) Обрабатывает Button1.Click, Button2.Click
Выберите «Регистр верно»
Отправителем обращения является Me.Button1
'Делай Button1'
Отправителем дела является Me.Button2
'Делай Button2'
Конец выбора
Конец сабвуфера
0
Я бы никогда не стал выбирать case true , но вы можете сделать это:
Select Case msg.GetType.Name Случай GetType(ClassA).Name ... Случай GetType(ClassB).
Click, Button2.Click
'заниматься общей деятельностью
Выберите CType (отправитель, кнопка). Имя
Кейс button1.Name
'сделай что-нибудь
Кейс button2.Name
сделать что-нибудь еще
Дело еще
'выполнить действие по умолчанию
Конец выбора
Конец сабвуфера
GetType()
Дело GetType(ClassA)
Конец выбора
