Я пытаюсь создать функцию, которая может принимать тип enum, отображать все возможные варианты выбора для пользователя, позволить ему выбрать один и затем передать его обратно. Обобщения не позволяют ограничивать перечисление. У меня есть работающий код, который будет приводить туда и обратно, но я бы хотел, чтобы он принимал и возвращал тот же тип enum.
Этот код работает, но не так хорошо, как хотелось бы:
Открытая функция getEnumSelection (владелец ByVal как Windows.Forms.IWin32Window, ByVal sampleValue как [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] .parse на вызывающей стороне напрямую к типу enum, так как у меня есть к нему доступ, но я бы хотел исключить этот шаг вручную.
Я бы хотел иметь возможность возвращать тот же тип перечисления или, по крайней мере, выполнить синтаксический анализ значения, которое я получил, и привести его в этой функции, но, похоже, эта строка не разрешена.
Затемнить результат как Object = [Enum] .Parse (GetType (sampleValue), mInput.ListBox1.SelectedItem.ToString, True)
В нем указано, что sampleValue не является типом. Итак ... как мне получить тип sampleValue для анализа?
Или есть другой способ, позволяющий легко и вообще разрешить пользователю выбирать значение перечисления без ручного кодирования функции отображения для каждого перечисления?