我想列出任意枚举的成员。当该名称是String
时,有没有办法获取枚举列表或从名称中获取枚举?
为什么呢?我们的想法是在Windows窗体中列出任何选定枚举的成员。列表的具体枚举可以通过将其名称输入TextBox
来提名;这需要一种从String
获取枚举对象的方法,但VB.net似乎不支持这一点。或者,也许更好,可以从Active Enumerations列表中选择Enumeration。 VB.Net中有如此多的Enumerations,列表的想法可能需要将Enum
名称列表限制为那些在当前应用程序中使用的名称。可以检索这样的清单吗?
答案 0 :(得分:0)
Dim enumType As Type = Type.GetType(enumTypeName)
Dim names = System.Enum.GetNames(enumType) 'working
如果enumTypeName
是类型
的“全名”,则上述代码将有效
(例如AssemblyName.YourEnum
)
Dim enumTypeFullName As String = GetType(YourEnum).FullName
Dim enumType As Type = Type.GetType(enumTypeName)
Dim names = System.Enum.GetNames(enumType) 'working
因此,如果您使用文本框输入枚举类型的名称,则需要输入枚举的全名或考虑使用一些预定义的命名空间,您可以在其中搜索给定的枚举名称
Function GetNamesByEnumTypeName(enumName As String) As IEnumerable(Of String)
Dim namespaces = New List(Of String) From
{
"Microsoft.VisualBasic",
"System"
}
Dim foundedTypes = namespaces.Select(Function(ns) $"{ns}.{enumName}").
Select(Function(fullName) Type.GetType(fullName)).
Where(Function(enumType) enumType IsNot Nothing)
For Each foundedType In foundedTypes
Return System.Enum.GetNames(foundedType)
Next
Return Enumerable.Empty(Of String)
End Function