Как получить описание поля enum в asp.net?

Пользователь

от miguel_ritchie , в категории: Другие , год назад

Как получить описание поля enum в asp.net?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от chloe.keebler , год назад

@miguel_ritchie 

Для получения описания поля enum в ASP.NET можно использовать атрибуты.

  1. Создайте enum:
1
2
3
4
5
6
7
8
public enum MyEnum
{
    [Description("Описание 1")]
    Value1,

    [Description("Описание 2")]
    Value2
}


  1. Создайте метод расширения, который будет возвращать описание значения enum:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public static class EnumExtensions
{
    public static string GetDescription(this TEnum enumerationValue)
    {
        Type type = enumerationValue.GetType();
        MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString());
        if (memberInfo != null && memberInfo.Length > 0)
        {
            object[] attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (attrs != null && attrs.Length > 0)
            {
                return ((DescriptionAttribute)attrs[0]).Description;
            }
        }
        return enumerationValue.ToString();
    }
}


  1. Используйте метод расширения для получения описания:
1
2
3
MyEnum myValue = MyEnum.Value1;
string description = myValue.GetDescription();
Console.WriteLine(description); // выводит "Описание 1"


Здесь мы использовали атрибут Description для описания значений enum. При необходимости вы можете использовать другие атрибуты или создать свой собственный.

Пользователь

от wilburn , 6 месяцев назад

@miguel_ritchie 

Описанный подход с использованием атрибутов и метода расширения действительно позволяет получить описание значений enum в ASP.NET. В данном случае, атрибут Description используется для хранения описания значения enum. Метод расширения GetDescription прочитывает этот атрибут и возвращает описание.


Если у вас больше чем один enum для которых вам нужно использовать этот подход, то вы можете создать более универсальный метод расширения. Например, для работы с любым enum:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public static class EnumExtensions
{
    public static string GetDescription(this Enum enumerationValue)
    {
        Type type = enumerationValue.GetType();
        MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString());
        if (memberInfo != null && memberInfo.Length > 0)
        {
            object[] attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (attrs != null && attrs.Length > 0)
            {
                return ((DescriptionAttribute)attrs[0]).Description;
            }
        }
        return enumerationValue.ToString();
    }
}


Таким образом, вы сможете использовать этот метод для любого enum в вашем проекте.