列挙型を取り、可能なすべての選択をユーザーに表示し、ユーザーに選択させてから戻すことができる関数を作成しようとしています。ジェネリックでは、列挙型に制限することはできません。前後にキャストするコードが動作していますが、同じ列挙型を受け入れて返すようにしたいと考えています。
このコードは機能しますが、私が望むほどではありません:
Public Function getEnumSelection (ByVal owner As Windows.Forms.IWin32Window, ByVal sampleValue As [Enum], ByVal subtitle As String) As String
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].parse を直接列挙型にアクセスできるため、列挙型に直接アクセスできますが、この手動の手順を排除したいと思います。
同じ列挙型を返すことができるようにしたい、または少なくともこの関数で受け取ってキャストしたときに値に解析を戻すことができるようにしたいのですが、この行は許可されていないようです。Dim result As Object = [Enum].Parse(GetType(sampleValue), mInput.ListBox1.SelectedItem.ToString, True)
sampleValue は型ではありません。では、解析する sampleValue の型を取得するにはどうすればよいでしょうか。
または、列挙型ごとにマッピング関数を手作業でコーディングせずに、ユーザーが列挙型の値を簡単かつ一般的に選択できるようにする別の方法はありますか?