如何从vb.net中的字符串获取枚举类型

时间:2020-05-11 20:59:13

标签: string vb.net enums

我声明了如下枚举:

Public Enum Myenum
    val1 = 0
    val2 = 1
End Enum

现在我有一个变量名为

Dim str As String = "Myenum"

如何使用变量str来访问枚举的值?

1 个答案:

答案 0 :(得分:0)

如果定义Enumerator的范围是一个类对象,则可以使用当前实例类型通过GetType().GetMember()获取与Enumerator类型名称相对应的成员:

如果枚举数可能不是公共的,请指定BindingFlags,以允许包括非公共成员。如果需要,添加BindingFlags.IgnoreCase

Imports System.Reflection

Dim enumTypeName = "MyEnum"

Dim flags = BindingFlags.Instance Or BindingFlags.NonPublic Or 
            BindingFlags.Public Or BindingFlags.IgnoreCase

Dim myEnumTypeInfo = Me.GetType().GetMember(enumTypeName, flags).FirstOrDefault()
If myEnumTypeInfo IsNot Nothing AndAlso Type.GetType(myEnumTypeInfo.ToString()).IsEnum Then
    Dim myEnumValues = Type.GetType(myEnumTypeInfo.ToString()).GetEnumValues()
    '[...]
End If

如果在更大范围内定义了枚举器类型,则可以使用Assembly.GetExecutingAssembly()并从DefinedTypes获取类型:

Dim myEnumType = Assembly.GetExecutingAssembly().
                 DefinedTypes.FirstOrDefault(Function(t) t.Name = enumTypeName)

If myEnumType IsNot Nothing AndAlso myEnumType.IsEnum Then
    Dim myEnumValues = myEnumType.GetEnumValues()
    '[...]
End If