选择case语句 - 使用变量VB.NET

时间:2014-06-15 05:21:05

标签: vb.net variables select

美好的一天!我是这个控制结构的新手,所以我想弄清楚的是从每个案例中获取input1和input2的值的方法(Case" String1"以及Case" String2")并在Case" String3"。

中使用它

代码:

Dim input1 As String
Dim input2 As String

Select Case sampleVariable
  Case "String1"
     input1 = "Some value"
  Case "String2"
     input2 = "Some value"
  Case "String3"
     MsgBox(input1 & input 2)
End Select

谢谢。

2 个答案:

答案 0 :(得分:1)

基本上,select语句就像是大量IF的简写...那么... ELSEIF ... END如果语句。如果您有大量需要针对单个实例进行测试的IF语句或条件,那么它真正做的就是使代码更容易阅读。大多数选择状态将用于确定某些对话框的结果,或者用户选择的其他预定义结果。如果你要写出你的select语句,它将如下所示:

If sampleVariable.Equals("String1") Then
    input1 = "Some value"
ElseIf sampleVariable.Equals("String2") Then
    input2 = "Some value"
ElseIf sampleVariable.Equals("String3") Then
    MsgBox(input1 & input2)
End if

您无法从第三种情况中的前两个语句访问您正在设置的值的原因是因为值赋值隐藏在封闭块中。为了更清楚地看到这一点,请看一下:

Dim checkValue As Boolean
If checkValue Then
   Dim hiddenVariable As String = "Hello World"
End If
MsgBox(hiddenVariable)

使用上面的示例,我的hiddenVarible在If块中被声明并实例化。只要checkValue始终为真,这样就可以正常工作。但是,如果checkValue为false,则hiddenVariable将永远不会声明,您可能会收到有关NullReference异常的异常。事实上,Visual Studio甚至无法在默认设置下编译它。

您的代码也会发生同样类型的事情。虽然您在开头声明了input1和input2,但您还没有使用任何值对它们进行实例化。因此,如果情况#3是您选择语句的结果,那么您基本上是在呼叫MsgBox(Nothing & Nothing)。前两个案例陈述中的值的设置永远不会发生,因为案例陈述没有评估为真。

现在看一下代码,我不确定为什么你要这样做,因为你正在为你的变量分配字符串文字。我将提供一些备选方案供您选择。

为案例#3添加一些检查以获取Nothing值:

Dim input1 As String
Dim input2 As String

Select Case sampleVariable
    Case "String1"
        input1 = "Some value"
    Case "String2"
        input2 = "Some value"
    Case "String3"
        If IsNothing(input1) OrElse IsNothing(input2) Then
            MsgBox("At least one of the input values has no value")
        Else
            MsgBox(input1 & input2)
        End If
End Select

使用经典IF ... THEN ... END IF块:

Dim input1 As String = String.Empty
Dim input2 As String = String.Empty
If sampleVariable.Equals("String1") Then
    input1 = "Some value"
ElseIf sampleVariable.Equals("String2") Then
    input2 = "Some value"
ElseIf sampleVariable.Equals("String3") Then
    MsgBox(input1 & input2)
End if

预先分配值并忘记select语句,因为它确实没有做任何事情:

Dim input1 As String = "Some value"
Dim input2 As String = "Some value"
If sampleVariable.Equals("String3") Then MsgBox(input1 & input2)

我希望这可以让你找到你想要的答案。 H 无论如果你要提供更多关于你想要做的事情的背景以及为什么你试图以这种方式完成它,我们也许能够提供更好的帮助。

答案 1 :(得分:0)

我不明白你想做什么,但首先想到的是:

Dim input1 As String
Dim input2 As String

If sampleVariable.Equals("String1") = True Then
    input1 = "Some value"
End if
If sampleVariable.Equals("String2") = True Then
    input2 = "Some value"
End if
If sampleVariable.Equals("String3") = True Then
    MsgBox(input1 & input2)
End if