문제

나는 열거 형식을 취하고 가능한 모든 선택을 사용자에게 표시하고 하나를 선택한 다음 다시 전달할 수있는 함수를 만들려고 노력하고 있습니다. 제네릭은 열거로 제한 할 수 없습니다. 앞뒤로 캐스트 될 코드가 작동하지만 동일한 열거 유형을 수락하고 반환하기를 바랍니다.

이 코드는 작동하지만 원하는대로 작동하지 않습니다.

public function getEnumSelection (byval as as windows.forms.iwin32window, byval samplevalue as [enum], byval 자막은 문자열로서)

    Dim names As String() = [Enum].GetNames(sampleValue.GetType)
    Using mInput As New dlgList
        mInput.ListBox1.Items.Clear()
        For Each name As String In names
            mInput.ListBox1.Items.Add(name)
        Next
        mInput.ShowDialog(owner)
        Return mInput.ListBox1.SelectedItem.ToString
    End Using
End Function

실행 된 후에는 [enum].

나는 동일한 열거 유형을 반환하거나 최소한이 함수에서 수신 할 때 값으로 다시 구문 분석을 할 수 있기를 원하지만이 라인을 허용하지 않는 것 같습니다. DIM 결과 Object = [enum] .parse (getType (sampleValue), minput.listbox1.SelectedItem.ToString, true)

SampleValue는 유형이 아니라고 말합니다. 그래서 ... 샘플 value 유형을 구문 분석하는 방법은 무엇입니까?

아니면 각 열거에 대한 매핑 함수를 손으로 코딩하지 않고 쉽고 일반적으로 열거 값을 선택할 수있는 또 다른 방법이 있습니까?

도움이 되었습니까?

해결책

가장 작은 질문에 먼저 답변하려면 이미 기능의 첫 번째 줄에서 이미 수행하고있는 것처럼 SampleValue.getType ()를 호출하여 객체 유형을 얻습니다. gettype는 객체 클래스의 키워드이자 메소드입니다. 첫 번째는 유형의 유형을 (다소 팽창적으로) 가져오고 두 번째는 객체 인스턴스의 유형을 얻습니다.

더 큰 질문에 관해서는, 나는 매개 변수에 약간 더 편안한 제약 조건을 가진 일반적인 방법을 사용하는 것이 좋습니다. 당신은 약간의 유형 안전을 잃지 만, 나는 그것이 괜찮은 트레이드 오프라고 생각합니다. 누군가가 아닌 구조를 통과하면 런타임에 인수 외환을 얻을 수 있으므로 기능에서 쓰레기를 꺼내는 것과는 다릅니다.

Public Function getEnumSelection(Of T As Structure)(ByVal owner As Windows.Forms.IWin32Window, ByVal subtitle As String) As T
    Dim names As String() = [Enum].GetNames(GetType(T))
    Using mInput As New dlgList
        mInput.ListBox1.Items.Clear()
        For Each name As String In names
            mInput.ListBox1.Items.Add(name)
        Next
        mInput.ShowDialog(owner)
        Return DirectCast([Enum].Parse(GetType(T), mInput.ListBox1.SelectedItem.ToString), T)
    End Using
End Function
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top