2013-09-19 2 views
13

Как я могу получить Enum описание от его значения?Получить VB.net Enum Описание от Value

я могу получить описание от имени с помощью:

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))) 

но ничего не пробовал правильно.

ответ

13

Если у вас есть переменная вашего перечислимого типа, это просто

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 не удались.

+0

Пробовал это, но это не работает ... он работает только с MyEnum.name, но у меня нет имени, только значение , – doovers

+0

@doovers: Обновлен мой ответ. Вам просто нужен актерский состав. – Heinzi

+0

спасибо, я знал, что это будет просто, но я не мог понять это! – doovers

3

Вот еще одно решение, чтобы получить описание 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 
Смежные вопросы