sourcetip

VB.NET 스위치 설명 Go To Case

fileupload 2023. 5. 18. 21:26
반응형

VB.NET 스위치 설명 Go To Case

VB.NET에 스위치 문을 사용하는 코드를 작성하고 있지만, 그 중 하나는 다른 블록으로 점프해야 합니다.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;
}

하지만 저는 이것을 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     

그러나 이 작업을 수행하면 컴파일러 오류가 발생합니다. "Identifier expected".'케이스' 밑에 꼬불꼬불한 줄이 있어요아이디어 있어요?

또한 이 경우 GoTo 문을 사용하는 것이 잘못된 것입니까?다른 방법으로 다시 써야 할 것 같습니다.


코드를 다음과 같이 변경했습니다.

If otherFactor AndAlso parameter = "mvrType" Then 
    'does something here 
Else 
    ' My original "Select Case statement" here without the case for "mvrType" 
End If

그냥 이렇게 하는 게 어때요?

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

마지막에 다른 사례가 없는 것이 큰 일인지 아닌지는 잘 모르겠지만, 만약 당신이 그것을 당신의 if의 다른 진술에 넣는다면 당신은 정말로 갈 필요가 없는 것처럼 보입니다.

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;
}

다음과 같은 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")

보다시피 If 문을 사용하여 동일한 스위치 케이스 문을 수행할 수 있습니다.일반적으로 이 기능은 이해하기 어렵기 때문에 권장하지 않지만 VB.NET은 동일한 기능을 지원하지 않는 것 같습니다. Reflector를 사용하는 것이 많은 고통 없이 작동하는 데 필요한 코드를 얻는 가장 좋은 방법일 수 있습니다.

업데이트:

VB.NET에서 동일한 작업을 수행할 수는 없지만 다른 유용한 작업을 지원합니다.IF 문 변환이 최선인 것 같습니다. 아니면 리팩터링일 수도 있습니다.다음은 Select...에 대한 정의입니다.사례.

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

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

앞서 말했듯이, 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

부울 값 사용 중...

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

부울 변수를 설정하는 대신 두 경우 모두 메소드를 직접 호출할 수 있습니다.

먼저 레이블을 선언해야 합니다.

    Select Case parameter 
        Case "userID"
                    ' does something here.
            Case "packageID"
                    ' does something here.
            Case "mvrType" 
                    If otherFactor Then 
                            ' does something here. 
                    Else 
                            GoTo else
                    End If 

            Case Else 
else :
                    ' does some processing... 
                    Exit Select 
    End Select
Select Case parameter 
    ' does something here. 
    ' does something here. 
    Case "userID", "packageID", "mvrType" 
        If otherFactor Then 
            ' does something here. 
        Else 
            goto case default 
        End If 
    Case Else 
        ' does some processing... 
        Exit Select 
End Select
Select Case parameter 
    Case "userID"
        ' does something here.
    Case "packageID"
        ' does something here.
    Case "mvrType" 
        If otherFactor Then 
            ' does something here.
        End If 
    Case Else 
        ' does some processing... 
        Exit Select 
End Select

가는 이유가 있나요?if 기준을 충족하지 못하면 단순히 기능을 수행하지 않고 다음 사례로 이동합니다.

적어도 Visual Basic 2017에서는 작동하는 방법이 있습니다.그래도 제일 예쁘지는 않아요.

GoTo Case "[label]"그리고.Goto [Case-label]여전히 작동하지 않습니다.

레이블(블▁the레▁()Number2여기서는 여가다야합니다어음이 .Case그것이 가장 실망스러운 부분이었습니다.

dim Value = "1"
Select Case Value
    Case "0"
       ' do nothing, example
    Case "1"
        MsgBox("one")
        GoTo Number2
    Case "2"
Number2:
        MsgBox("two")
    Case "boolean"
        MsgBox("three")
        ' just to show it won't fall through
End Select
Select Case parameter
    ' does something here.
    ' does something here.
    Case "userID", "packageID", "mvrType"
                ' does something here.
        If otherFactor Then
        Else
            goto case default
        End If
    Case Else
        ' does some processing...
        Exit Select
End Select

언급URL : https://stackoverflow.com/questions/820104/vb-net-switch-statement-goto-case

반응형