Могут ли строковые функции выполняться в операторе Select-Case?

В VB.NET, как я могу достичь следующей логики?

Select Case testString
    Case Contains("ABC") : Debug.Print "ABC"
    Case Contains("XYZ") : Debug.Print "XYZ"
    Case Else : Debug.Print "Other"
End Select

person CJ7    schedule 09.07.2013    source источник


Ответы (2)


Просто:

If testString.Contains("ABC") Then
    Debug.Print "ABC"
ElseIf testString.Contains("XYZ") Then
    Debug.Print "XYZ"
Else
    Debug.Print "Other"
End If

Вы не можете проверить результат функции этого типа в операторе Select Case, поэтому использование простого оператора If - ваш лучший и легкий выбор.

Вы всегда можете это сделать:

Select Case True
    Case testString.Contains("ABC") : Debug.Print("ABC")
    Case testString.Contains("XYZ") : Debug.Print("XYZ")
    Case Else : Debug.Print("Other")
End Select

Но это сработает только в очень конкретных случаях и совсем не очень понятно и не нужно.

person SysDragon    schedule 09.07.2013
comment
@ CJ7 Пожалуйста, подумайте о том, чтобы отметить любой ответ как правильный и проголосовать за него, если он был полезен для вас. - person SysDragon; 12.07.2013

В VB.NET вы можете использовать этот _1 _ :

Select Case True
    Case testString.Contains("ABC")
        Debug.Print("ABC")
    Case testString.Contains("XYZ")
        Debug.Print("XYZ")
    Case Else : Debug.Print("Other")
End Select

Однако в этом случае я бы предпочел простое предложение If.

If testString.Contains("ABC") Then
    Debug.Print("ABC")
ElseIf testString.Contains("XYZ") Then
    debug.Print("XYZ")
Else
    Debug.Print("Other")
End If

Это было бы более понятно и совместимо с C #. switch допускает только постоянные выражения.

person Tim Schmelter    schedule 09.07.2013
comment
Поскольку это работает в этом конкретном примере, это не будет допустимым подходом для функций, которые всегда возвращают значения, отличные от просто логического типа. - person SysDragon; 09.07.2013
comment
@SysDragon: Конечно, нельзя использовать Select...Case для всего. Но в большем количестве случаев, чем в C #. OP хочет использовать его с функцией, которая все равно возвращает Boolean. - person Tim Schmelter; 09.07.2013