获取活动枚举

时间:2017-04-18 12:20:25

标签: .net vb.net

我想列出任意枚举的成员。当该名称是String时,有没有办法获取枚举列表或从名称中获取枚举?

为什么呢?我们的想法是在Windows窗体中列出任何选定枚举的成员。列表的具体枚举可以通过将其名称输入TextBox来提名;这需要一种从String获取枚举对象的方法,但VB.net似乎不支持这一点。或者,也许更好,可以从Active Enumerations列表中选择Enumeration。 VB.Net中有如此多的Enumerations,列表的想法可能需要将Enum名称列表限制为那些在当前应用程序中使用的名称。可以检索这样的清单吗?

1 个答案:

答案 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