修改select变量的“Select Case”构造不起作用

时间:2013-07-29 18:53:17

标签: vb.net switch-statement

出于某种原因,我的选择案例无效。我确定这是愚蠢的。这就是我所拥有的:

Private Function getVirtualCommand(ByVal command As String)
    Dim virCommand As String

    Select Case virCommand
        Case command = "A"
            virCommand = VK_A
        Case command = "B"
            virCommand = VK_B
        Case command = "C"
            virCommand = VK_C
        Case Else
            MsgBox("The key command " + command + " is not listed. getVirtualCommand()", MsgBoxStyle.OkOnly, "Error")
    End Select

    Return virCommand
End Function

3 个答案:

答案 0 :(得分:4)

您正在使用Select Case检查virCommand变量的值。 virCommand始终为Nothing,因为它刚刚声明并且尚未设置为值。相反,您需要检查command参数的值。此外,您不需要在每个Case语句中重新声明变量名称。您只需要声明值,例如:

Private Function getVirtualCommand(ByVal command As String) As Integer
    Dim virCommand As Integer

    Select Case command
        Case "A"
            virCommand = VK_A
        Case "B"
            virCommand = VK_B
        Case "C"
            virCommand = VK_C
        Case Else
            MessageBox.Show("The key command " & command & " is not listed. getVirtualCommand()", "Error")
    End Select

    Return virCommand
End Function

请注意,我添加了As Integer来指定函数的返回类型。如果未指定返回值,则假定返回类型为Object。最好指定一个更具体的类型,以便调用该函数的人知道会发生什么。如果您有Option Strict On,我就不会编译,我建议这样做。

我还将virCommand变量从String更改为Integer,因为虚拟键常量(例如VK_AVK_B)是整数。如果您有Option Strict On,也不会编译。

另请注意,我还将MsgBox更改为MessageBox.Show,这是首选。 MsgBox是一个旧函数,主要用于向后兼容VB6。您会注意到我还将字符串连接运算符从+更改为&。来自C#背景,我偏爱使用+进行连接,我自己。但是,除非Option Strict On使用+运算符进行连接,否则可能会造成危险。 &是安全的,即使你有Option Strict Off,而且它更具体和自我记录,所以大多数人更喜欢在VB.NET中使用它。

答案 1 :(得分:2)

尝试替换

Return virCommand

getVirtualCommand = virCommand

这是函数在Visual Basic中返回值的方式。

更多信息位于 [vbscript] How to return value from a function

答案 2 :(得分:1)

非常简单,您需要检查参数命令:

Private Function getVirtualCommand(ByVal command As String) as Integer
    Dim virCommand as Integer
   Select Case command 
        Case "A"
            virCommand = VK_A
        Case "B"
            virCommand = VK_B
        Case "C"
            virCommand = VK_C
        Case Else
            MsgBox("The key command " + command + " is not listed. getVirtualCommand()", MsgBoxStyle.OkOnly, "Error")
    End Select

    Return virCommand
End Function