6

我正在尝试创建一系列可以接受参数的命令。获取我正在使用的每个单独Select Case的命令问题是,如果我使用Case Else. 如果我不使用Case Else,那么我将无法处理不正确的命令并将它们发送到所需的程序。

例如:

Private Sub AllocateType(ByVal Command As String)

    Select Case Command
        Case "Eat"
            'Call Eat procedure
        Case "Use"
            'Call Use procedure
        Case "Quit"

        Case "Pause"

        Case "Go"

        Case Else
            Errors() 'Error handling procedure
    End Select

End Sub

如果命令是“Brrrrr”,它将调用Errors(). 然而,如果命令是“吃食物”,它仍然会调用Errors()并且不会将参数传递给Eat过程。

编辑,因为它现在不起作用。 我已经尝试了建议的方法,但我仍然遇到完全相同的问题。似乎两者都Command.StartsWith不起作用Command.Contains,因为如果我尝试输入“吃食物”,它仍然无法将其识别为案例。

例子:

Select Case Command
    Case Command.Contains("Eat")
        Output("TESTING")
        If Len(Command) > 4 Then
            Command = Mid(Command, 4, (Len(Command) - 4))
            Interaction(Command)
        Else
            Output("Eat What?")
        End If
    Case "Eat"
        Output("Eat What?")
    Case Command.StartsWith("Use")
        If Len(Command) > 4 Then
            Command = Mid(Command, 4, (Len(Command) - 4))
            Interaction(Command)
        Else
            Output("Use What?")
        End If
    Case "Use"
        Output("Use What?")
        'Case Else
        '    Errors()
End Select
4

3 回答 3

5

您需要使用IF语句来执行您想要的那种检查。
你有两个选择StartsWithContains
StartsWith将允许您检查您的关键字是否在字符串的开头。

  • 吃香蕉=真
  • 香蕉吃=假

Contains将允许您检查您的关键字是否存在于任何地方。

  • 吃香蕉=真
  • 香蕉吃=真

从示例开始

Private Sub AllocateType(ByVal Command As String)

    If Command.StartsWith("Eat") Then
        'Call Eat procedure
    Else If Command.StartsWith("Use") Then
        'Call Use procedure
    Else If Command.StartsWith("Quit") Then
        'Call Quit procedure
    Else If Command.StartsWith("Pause") Then
        'Call Pause procedure
    Else If Command.StartsWith("Go") Then
        'Call Go procedure
    Else
        Errors()
    End If

End Sub

包含示例

Private Sub AllocateType(ByVal Command As String)

    If Command.Contains("Eat") Then
        'Call Eat procedure
    Else If Command.Contains("Use") Then
        'Call Use procedure
    Else If Command.Contains("Quit") Then
        'Call Quit procedure
    Else If Command.Contains("Pause") Then
        'Call Pause procedure
    Else If Command.Contains("Go") Then
        'Call Go procedure
    Else
        Errors()
    End If

End Sub

也可以使用StartsWithContains您可以这样做StringComparison将允许您忽略大小写。

If Command.StartsWith("Eat", StringComparison.OrdinalIgnoreCase) Then

或者

If Command.Contains("Eat", StringComparison.OrdinalIgnoreCase) Then

忽略大小写将匹配“EAT”、“Eat”、“eAt”等。

于 2014-01-05T10:15:32.470 回答
4

诚然,您可以保留自己的Select Case障碍,但由于您没有检查是否完全相等,String您应该检查Command.Contains("Eat")Command.StartsWith("Eat")取决于您的目标

例如;

Private Sub AllocateType(ByVal Command As String)

    Select Case True
        Case Command.StartsWith("Eat")
            'Call Eat procedure
        Case Command.StartsWith("Use")
            'Call Use procedure
        Case Command.StartsWith("Quit")
        Case Command.StartsWith("Pause")
        Case Command.StartsWith("Go")
        Case Else
            Errors() 'Error handling procedure
    End Select

End Sub
于 2014-01-05T10:16:40.590 回答
4

你可以保持Case结构:

Private Sub AllocateType(ByVal Command As String)

    Select Case True
        Case Command.StartsWith("Eat")
            'Call Eat procedure
        Case Command.StartsWith("Use")
            'Call Use procedure
        Case Command.StartsWith("Quit")

        Case Command.StartsWith("Pause")

        Case Command.StartsWith("Go")

        Case Else
            Errors() 'Error handling procedure
    End Select

End Sub
于 2014-01-05T10:34:56.910 回答