【问题标题】:Get VB.net Enum Description from Value从值获取 VB.net 枚举描述
【发布时间】:2013-09-19 07:21:49
【问题描述】:

如何从 Enum 的值中获取描述?

我可以使用以下方法从名称中获取描述:

Public Shared Function GetEnumDescription(ByVal EnumConstant As [Enum]) As String
    Dim fi As FieldInfo = EnumConstant.GetType().GetField(EnumConstant.ToString())
    Dim attr() As DescriptionAttribute = _ 
                  DirectCast(fi.GetCustomAttributes(GetType(DescriptionAttribute), _
                  False), DescriptionAttribute())

    If attr.Length > 0 Then
        Return attr(0).Description
    Else
        Return EnumConstant.ToString()
    End If
End Function 

但我不知道如何将变量名传递给这个函数。我尝试过类似

GetEnumDescription([Enum].GetName(GetType(myEnum), 2)))

但我尝试过的都不是正确的。

【问题讨论】:

    标签: vb.net enums


    【解决方案1】:

    如果你有一个枚举类型的变量,那就很简单

    GetEnumDescription(myEnum)
    

    最小的工作示例:

    Enum TestEnum
        <Description("Description of Value1")>
        Value1
    End Enum
    
    Public Sub Main()
        Dim myEnum As TestEnum = TestEnum.Value1
        Console.WriteLine(GetEnumDescription(myEnum)) ' prints "Description of Value1"
        Console.ReadLine()
    End Sub
    

    如果您有一个 Integer 变量,您需要先将其转换为您的枚举类型(CType 也可以):

    GetEnumDescription(DirectCast(myEnumValue, TestEnum))
    

    工作示例:

    Enum TestEnum
        <Description("Description of Value1")>
        Value1 = 1
    End Enum
    
    Public Sub Main()
        Console.WriteLine(GetEnumDescription(DirectCast(1, TestEnum)))
        Console.ReadLine()
    End Sub
    

    您的困惑的根源似乎是一个误解:您的方法没有将枚举的“名称”作为参数,而是将Enum 作为参数。那是不同的东西,这也是您尝试使用GetName 失败的原因。

    【讨论】:

    • 试过了,但没有用...它只适用于 MyEnum.name 但我没有名称,只有值。
    • @doovers:更新了我的答案。你只需要一个演员表。
    • 谢谢,我知道这很简单,但我想不通!
    • GetEnumDescription 对我来说不存在。我必须使用扩展名添加它,如@mikro 提供的答案所示
    • @tmighty:不是内置的,是OP写的方法,可以在问题本身找到。
    【解决方案2】:

    这是获取 Enum 描述作为扩展的另一种解决方案。

    Imports System.ComponentModel
    Imports System.Runtime.CompilerServices
    
    <Extension()> Public Function GetEnumDescription(ByVal EnumConstant As [Enum]) As String
        Dim attr() As DescriptionAttribute = DirectCast(EnumConstant.GetType().GetField(EnumConstant.ToString()).GetCustomAttributes(GetType(DescriptionAttribute), False), DescriptionAttribute())
        Return If(attr.Length > 0, attr(0).Description, EnumConstant.ToString)
    End Function
    

    上篇文章的使用示例:

    Enum Example
        <Description("Value1 description.")> Value1 = 1
        <Description("Value2 description.")> Value2 = 2
    End Enum
    
    Sub Main()
        Console.WriteLine(DirectCast(2, Example).GetEnumDescription())
        Console.ReadLine()
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多