Выберите Case True в VB.NET

У меня есть следующий случай выбора, где я хочу сделать несколько проверок того, что содержит строка, и вызвать некоторые функции для каждого случая. Но, похоже, что если несколько условий выполняются, учитывается только первое условие. Проблема в том, что у меня около 113 разных случаев.

Должен ли я использовать оператор if для каждого случая?

   Select Case True
          Case command.ToUpper.Contains(" S:")
'Do something
          Case command.ToUpper.Contains(" C:")
'Do something
          Case command.ToUpper.Contains(" *S")
'Do something
          Case command.ToUpper.Contains(" *C")
'Do something
          Case command.ToUpper.Contains(" CC")
'Do something
          Case command.ToUpper.Contains(" SS")
    End Select

2 ответа

Решение

Вот как определяется случай выбора. Использование последовательности операторов If будет работать.

Рассмотрим решение на основе таблиц (псевдокод):

For Each pat In patterns
  If command contains pattern.pat
    perform pattern.action

Просто мысль, но как насчет

dim tempCommand as string = command.ToUpper()
dim match as boolean = true

while match andalso tempCommand.length > 0
    select case true
        Case tempCommand.Contains(" S:")
            'Do something
            'then do this    
            tempCommand = tempCommand.replace(" S:","")
        Case tempCommand.Contains(" C:")
            'Do something
            'then do this
            tempCommand = tempCommand.replace(" C:","")
        Case tempCommand.Contains(" *S")
            'Do something
            'then do this
            tempCommand = tempCommand.replace(" *S","")
        Case tempCommand.Contains(" *C")
            'Do something    
            'then do this
            tempCommand = tempCommand.replace(" *C","")
        Case tempCommand.Contains(" CC")
            'Do something
            'then do this
            tempCommand = tempCommand.replace(" CC","")
        Case command.ToUpper.Contains(" SS")
            'then do this
            tempCommand = tempCommand.replace(" SS","")    
        case else match = false
    end select
end while

Я предполагаю, что на основании различных критериев вы выполняете разные действия, поэтому я не уверен, как бы вы выполняли "execute pattern.action", если только это не является способом динамического выполнения кода, о котором я не знаю, и было бы совершенно круто, если бы это можно было сделать.

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

Другие вопросы по тегам