【问题标题】:Parse a string to an Enum value in VB.NET在 VB.NET 中将字符串解析为枚举值
【发布时间】:2010-10-25 12:38:47
【问题描述】:

如何将 VB.NET 中的字符串解析为枚举值?

例如我有这个枚举:

Public Enum Gender
    NotDefined
    Male
    Female
End Enum

如何将字符串 "Male" 转换为 Gender 枚举的 Male 值?

【问题讨论】:

    标签: vb.net enums


    【解决方案1】:
    Dim val = DirectCast([Enum].Parse(GetType(Gender), "Male"), Gender)
    

    【讨论】:

    • 如果我不知道类型并想进行一般转换怎么办。在此示例中,您指定了 Male。我将枚举值保存在数据库中,并试图取回它。在这种情况下,我可能不知道我在转换为字符串后保存的实际值
    • 您应该使用值保存相关的 Enum 类型,例如“Namespaces.EnumName”。在您可以使用反射按名称获取 Type 对象之后: Dim t = Type.GetType("Namespaces.EnumName") 并传递 't' 而不是 'GetType(Gender)'。此外,您将不得不转换结果值。为此,您必须在编写代码时知道具体的枚举类型。
    • 在 .NET 4.0 中,语法很简单:Parse(enumType As System.Type, value As String) As Object
    • 他在询问枚举的值,但是这个 sn-p 只是从字符串返回一个 Enum 对象。应该是:DirectCast([Enum].Parse(GetType(Gender), "Male"), Integer)
    【解决方案2】:

    【讨论】:

    • 只有 Parse() 方法。不确定 Enum.TryParse() 方法在哪里?
    • @David:Enum.TryParse() 在 .NET 4 中可用
    • 正确链接,无法编辑答案,因为它少于 30 个字符:msdn.microsoft.com/en-us/library/dd783499.aspx
    【解决方案3】:

    如何将字符串“Male”转换为 Gender 枚举的 Male 值?

    接受的解决方案返回一个 Enum 对象。要返回您想要此解决方案的值:

    dim MyGender as string = "Male"
    dim Value as integer
    Value = DirectCast([Enum].Parse(GetType(Gender), MyGender), Integer)
    

    也可以这样:

    value = cInt([enum].Parse(GetType(Gender), MyGender))
    

    【讨论】:

      【解决方案4】:

      如果您希望解析不区分大小写,可以使用以下内容:

      [Enum].Parse(Gender, DirectCast(MyGender, String), True)
      

      这将处理dim MyGender as string = "Male" 或dim MyGender as string = "male"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多