3

我有一个案例结构,可以根据该值解码字符串值和操作代码。案例结构非常简单,它解码预定义的值(例如“/Start”、“/Run”等)。但是,我在这个案例结构的一部分中需要解码一个变化的值。

因此,例如,我需要捕获“/IP:blah”的字符串值(其中blah 将始终更改)并基于blah 执行代码。

我的代码看起来像这样:

Select Case Message
Case Like "/SetServerIP:*"
                        'Determine IP from Message string (*)
                        'Set new IP address of server in my.settings
End Select

不确定如何实现这一点。任何帮助表示赞赏,谢谢。

4

3 回答 3

2

您可以使用Case带有Is关键字和比较运算符表达式的语句。

选择...案例

将 Is 关键字与比较运算符(=、<>、<、<=、> 或 >=)一起使用以指定对 testexpression 匹配值的限制。如果没有提供 Is 关键字,它会自动插入到比较运算符之前。

如果 Case 语句有效,则可以使用Substring()以下方式获取 IP 地址:

Dim IPAddress As String=String.Empty
Select Case Message

    Case "/Start"
        ' Your code here
    Case Is >= "/SetServerIP:"
        IPAddress = Message.Substring(13)
        ' your code here
End Select

这将例如匹配
"/SetServerIP:127.0.0.1" => IPAddress = "127.0.0.1"
"/SetServerIP:" => IPAddress = ""

编辑:请注意,这仅在您没有字符串比较中的消息时才有效,而greater不是/SetServerIP:例如/SftServerIP:or /SetServerIR

于 2013-09-16T10:27:17.553 回答
2

对已经接受的答案略有改进。使用下面的代码,为我工作

Select Case True 
Case Message Like "/SetServerIP:*"
                        'Determine IP from Message string (*)
                        'Set new IP address of server in my.settings
End Select
于 2020-01-28T12:55:08.797 回答
1

一般来说,你会使用比较Is

Select Case aNumber
    Case Is > 42
End Select

…不幸的是,这不适用于Like操作员(感谢 Heslacher 向我指出这一点)。Select Case所以VB的声明不支持这个用例。您可以改用链式If语句。

或者,首先从您的消息中解析出命令并根据该命令进行选择:

Dim command = Message.Split(":"c)(0)

Select Case command
    Case "/SetServerIP"
    …
End Select
于 2013-09-16T08:41:42.197 回答