Get VB.net Enum Description from Value

匿名 (未验证) 提交于 2019-12-03 01:10:02

问题:

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.

回答1:

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

GetEnumDescription(myEnum) 

Minimal working example:

Enum TestEnum          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          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.



回答2:

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

Imports System.ComponentModel Imports System.Runtime.CompilerServices   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      Value1 = 1      Value2 = 2 End Enum  Sub Main()     Console.WriteLine(DirectCast(2, Example).GetEnumDescription())     Console.ReadLine() End Sub 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!