Get VB.net Enum Description from Value

前端 未结 2 838
情话喂你
情话喂你 2020-12-17 14:02

How can I get Enum description from its value?

I can get the description from the name using:

Public Shared Function GetEnumDescription(         


        
相关标签:
2条回答
  • 2020-12-17 14:53

    If you have a variable of your enum type, it's simply

    GetEnumDescription(myEnum)
    

    Minimal working example:

    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
    

    If you have an Integer variable, you need to cast it to your enum type first (CType works as well):

    GetEnumDescription(DirectCast(myEnumValue, TestEnum))
    

    Working example:

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

    The source for your confusion seems to be a misunderstanding: Your method does not take the "name" of an enum as a parameter, it takes an Enum as a parameter. That's something different, and it's also the reason why your attempts to use GetName failed.

    0 讨论(0)
  • 2020-12-17 14:55

    Here's another solution to get an Enum's description as an extension.

    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
    

    Example use from the previous posts:

    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
    
    0 讨论(0)
提交回复
热议问题