KTF*_*KTF 27 vb.net goto switch-statement
我在VB.NET中编写了一些使用switch语句的代码,但在其中一种情况下,它需要跳转到另一个块.在C#中,它看起来像这样:
switch (parameter)
{
case "userID":
// does something here.
case "packageID":
// does something here.
case "mvrType":
if (otherFactor)
{
// does something here.
}
else
{
goto default;
}
default:
// does some processing...
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何将其转换为VB.NET.我试过这个:
Select Case parameter
Case "userID"
' does something here.
Case "packageID"
' does something here.
Case "mvrType"
If otherFactor Then
' does something here.
Else
GoTo Case Else
End If
Case Else
' does some processing...
Exit Select
End Select
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我得到一个编译错误:"标识符预期"."案例"下有一条波浪线.有任何想法吗?
另外,在这种情况下使用GoTo语句是错误的吗?似乎任何其他方式我都要重写它.
我已将代码更改为:
If otherFactor AndAlso parameter = "mvrType" Then
'does something here
Else
' My original "Select Case statement" here without the case for "mvrType"
End If
Run Code Online (Sandbox Code Playgroud)
rya*_*lit 21
为什么不这样做:
Select Case parameter
Case "userID"
' does something here.
Case "packageID"
' does something here.
Case "mvrType"
If otherFactor Then
' does something here.
Else
' do processing originally part of GoTo here
Exit Select
End If
End Select
Run Code Online (Sandbox Code Playgroud)
我不确定是否在最后还没有其他情况是一个大问题,但是如果你只是把它放在if的else语句中,你似乎真的不需要去.
Nic*_*rdi 15
我找不到VB.NET中的等价物.对于这段代码,您可能希望在Reflector中打开它并将输出类型更改为VB以获取所需代码的精确副本.例如,当我将以下内容放入Reflector时:
switch (args[0])
{
case "UserID":
Console.Write("UserID");
break;
case "PackageID":
Console.Write("PackageID");
break;
case "MVRType":
if (args[1] == "None")
Console.Write("None");
else
goto default;
break;
default:
Console.Write("Default");
break;
}
Run Code Online (Sandbox Code Playgroud)
它给了我以下VB.NET输出.
Dim CS$4$0000 As String = args(0)
If (Not CS$4$0000 Is Nothing) Then
If (CS$4$0000 = "UserID") Then
Console.Write("UserID")
Return
End If
If (CS$4$0000 = "PackageID") Then
Console.Write("PackageID")
Return
End If
If ((CS$4$0000 = "MVRType") AndAlso (args(1) = "None")) Then
Console.Write("None")
Return
End If
End If
Console.Write("Default")
Run Code Online (Sandbox Code Playgroud)
如您所见,您可以使用If语句完成相同的switch case语句.通常我不推荐这个,因为它使得它更难理解,但VB.NET似乎不支持相同的功能,并且使用Reflector可能是获得所需代码的最佳方式很痛苦.
更新:
刚刚确认你不能在VB.NET中做同样的事情,但它确实支持其他一些有用的东西.看起来IF语句转换是您最好的选择,或者可能是一些重构.这是Select ... Case的定义
http://msdn.microsoft.com/en-us/library/cy37t14y.aspx
在 VB.NET 中,即使其他条件不适用于 Select 参数,您也可以应用多个条件。见下文:
Select Case parameter
Case "userID"
' does something here.
Case "packageID"
' does something here.
Case "mvrType" And otherFactor
' does something here.
Case Else
' does some processing...
End Select
Run Code Online (Sandbox Code Playgroud)
我不确定使用 GoTo 是否是个好主意,但如果您确实想使用它,您可以执行以下操作:
Select Case parameter
Case "userID"
' does something here.
Case "packageID"
' does something here.
Case "mvrType"
If otherFactor Then
' does something here.
Else
GoTo caseElse
End If
Case Else
caseElse:
' does some processing...
End Select
Run Code Online (Sandbox Code Playgroud)
正如我所说,虽然它有效,但 GoTo 不是好的做法,所以这里有一些替代解决方案:
使用其他...
If parameter = "userID" Then
' does something here.
ElseIf parameter = "packageID" Then
' does something here.
ElseIf parameter = "mvrType" AndAlso otherFactor Then
' does something here.
Else
'does some processing...
End If
Run Code Online (Sandbox Code Playgroud)
使用布尔值...
Dim doSomething As Boolean
Select Case parameter
Case "userID"
' does something here.
Case "packageID"
' does something here.
Case "mvrType"
If otherFactor Then
' does something here.
Else
doSomething = True
End If
Case Else
doSomething = True
End Select
If doSomething Then
' does some processing...
End If
Run Code Online (Sandbox Code Playgroud)
除了设置布尔变量之外,您还可以在两种情况下直接调用方法......