我正在尝试制作一个可以采用枚举类型的函数,向用户显示所有可能的选择,让他们选择一个然后将其传回。泛型不允许您限制枚举。我的代码可以来回转换,但我希望它接受并返回相同的枚举类型。
这段代码有效,但不如我想的那么好:
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 在调用者上直接解析到枚举类型,因为我可以在那里访问它,但我想消除这个手动步骤。
我希望能够返回相同的枚举类型,或者至少将解析返回到我收到的值并将其转换为该函数,但它似乎不允许这一行。暗淡结果 As Object = [Enum].Parse(GetType(sampleValue), mInput.ListBox1.SelectedItem.ToString, True)
它说 sampleValue 不是一种类型。那么...如何获取要解析的 sampleValue 类型?
或者是否有另一种方法可以轻松且通用地允许用户选择枚举值,而无需为每个枚举手动编码映射函数?