문제

이 유효한 C#이 확실하지 않지만 아이디어를 얻을 수 있기를 바랍니다. :)

switch (msg.GetType()) {
    case ClassA:
        // blah
    case ClassB:
        // blah 2
    case ClassC:
        // blah 3
}

객체의 유형을 켜고 vb.net을 사용하는 방법 Select Case?

나는 어떤 사람들이 사용을 제안 할 수도 있다는 것을 알고 있습니다 다형성, 그러나 나는 작은 메시지 클래스의 계층 구조를 사용하여 실제로 제 경우에는 작동하지 않을 것입니다.

도움이 되었습니까?

해결책

VB 2010을 사용하면 .NET Framework 4 이상을 타겟팅하는 프로젝트의 경우 이제 다음을 수행 할 수 있습니다.

Select Case msg.GetType()
    Case GetType(ClassA)
End Select

이전 VB 버전에서는 두 가지 유형을 평등과 비교할 수 없었기 때문에 작동하지 않았습니다. IS 키워드를 사용하여 동일한 참조를 가리키는 지 확인해야합니다. Michael이 제안한 것처럼 이름이나 FullName과 같은 유형의 속성을 사용하지 않는 한 선택된 경우에서는이 작업을 수행 할 수 없습니다. IF와 Elseif의 조합을 사용할 수 있습니다.

Dim type = msg.GetType()
If type Is GetType(ClassA)
    ...
ElseIf type Is GetType(ClassB)
    ...
...
End If

다른 팁

SELECT CASE 사용을 고집하면 언제든지 다음과 같이 갈 수 있습니다.

Select Case True
    Case TypeOf msg Is ClassA
        ' do something '
    Case TypeOf msg Is ClassB
        ' do something else '
    Case Else
        ' and so on '
End Select

그러나 나는 대부분의 사람들이 이런 종류의 것을 피하는 것을 좋아한다고 생각합니다. /elseif가 더 명확 할 것입니다.

이것은 동일한 서브에서 Button1 및 Button2를 처리하는 방법입니다 (VB6 프로그래머로 시작하여 제어 어레이의 VB6 처리를 대체 할 수 있습니다).

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
                Select Case True
                    Case sender Is Me.Button1
                        ' Do Button1 stuff '
                    Case sender Is Me.Button2
                        ' Do Button2 stuff '
                End Select
            End Sub

나는 결코 결코 없을 것입니다 select case true, 그러나 당신은 이것을 할 수 있습니다 :

Select Case msg.GetType.Name
    Case GetType(ClassA).Name
        ...
    Case GetType(ClassB).Name
        ...
    Case Else
        ...
End Select

이보다 더 깨끗해 보입니다.

If msg.GetType Is GetType(ClassA) Then
    ...
ElseIf msg.GetType Is GetType(ClassB) Then
    ...
Else
    ...
End If

이것:

Dim a As Object = New TextBox

Select Case True
    Case TypeOf a Is TextBox
        MsgBox("aaa")

    Case TypeOf a Is ComboBox

    Case TypeOf a Is ListBox

End Select
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top