Search code examples
vb.netenums

Get VB.net Enum Description from Value


How can I get Enum description from its value?

I can get the description from the name using:

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 

But I cant figure out how to pass a variable name to this function. I've tried things like

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

but nothing I've tried is correct.


Solution

  • 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.