【问题标题】:How to get the enum type from a string in vb.net如何从 vb.net 中的字符串中获取枚举类型
【发布时间】:2020-05-11 20:59:13
【问题描述】:

我已经声明了一个枚举如下:

Public Enum Myenum
    val1 = 0
    val2 = 1
End Enum

现在我有了一个变量名

Dim str As String = "Myenum"

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

【问题讨论】:

  • 我不知道你在问什么。也许您可以提供一些背景信息?
  • 我已经声明了问题中所说的枚举。现在我在我的程序中以编程方式收到了一个字符串值,比如 str 的值为“Myenum”,这个值是我声明的枚举的名称。现在我想动态地使用 str 来访问枚举类型 Myenum 的值。有可能吗?
  • 根据上下文,我真的想问你打算用它做什么。将枚举名称作为字符串传递似乎很奇怪,因此尝试更多地了解您的情况,以便提供最佳建议
  • 可以简单到 str = "Myenum" Then....
  • 我正在使用一个有许多表的数据库,现在在运行查询后,我收到了一个名为“Myenum”的名称,这也是一个表的名称。现在我想使用这个字符串类型的变量来访问之前声明的枚举类型的值。

标签: string vb.net enums


【解决方案1】:

如果定义Enumerator的作用域是类对象,可以使用当前实例类型获取Enumerator类型名对应的成员,使用GetType().GetMember()

如果 Enumerator(s) 可能不是公共的,请指定允许包含非公共成员的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 2022-11-10
    • 1970-01-01
    • 2014-07-23
    • 2018-11-25
    • 1970-01-01
    相关资源
    最近更新 更多