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

422
15 марта 2017, 15:44

Есть enum содержащий определенный набор значений (state)

public enum State : int {
CONNECTION_ERROR,
CONNECTION_COMPLETE,
WAIT_CONNECTION
}

В отчете есть значение поля State и оно выводится во view. Собственно выглядит например так: Состояние : CONNECTION_COMPLETE. Нужно что бы вместо названия поля enum'a выводился понятный текст (Ошибка соединение, Соединение завершено успешно, Ожидание соединения). Пробовал через атрибут [Display(name="...")] не помогло, выводится именно название строки в enum'e. Может кто знает как решить такую проблему?

Answer 1

Можно использовать Description из компонентной модели:

using System.ComponentModel;
namespace Main {
    public enum State : byte
    {
        [Description("Ошибка соединения")]
        CONNECTION_ERROR,
        [Description("Соединение выполнено")]
        CONNECTION_COMPLETE,
        [Description("Ожидание соединения")]
        WAIT_CONNECTION
    }
}

Затем создаем расширяющий метод для перечислений, который будет возвращать нам описание:

namespace Main.Extensions
{
/// <summary>
/// Расширение Enum
/// </summary>
public static class EnumExtensions
{
    /// <summary>
    /// Получить атрибут "Описание"
    /// </summary>
    /// <param name="value">Значение перечисления</param>
    /// <returns>Значение атрибута "Описание"</returns>
    public static string GetDescription(this Enum value)
    {
        FieldInfo fi = value.GetType().GetField(value.ToString());
        DescriptionAttribute[] attributes =
            (DescriptionAttribute[])fi.GetCustomAttributes(
            typeof(DescriptionAttribute),
            false);
        if (attributes != null &&
            attributes.Length > 0)
            return attributes[0].Description;
        else
            return value.ToString();
    }
}
}

И используем его:

State.CONNECTION_COMPLETE.GetDescription();
READ ALSO
C# List vs LinkedList vs Array

C# List vs LinkedList vs Array

List vs LinkedList vs Array

313
Как сделать вывод смайликов в текстовом поле RichEdit

Как сделать вывод смайликов в текстовом поле RichEdit

Добрый деньХочу сделать программу, которая бы текстовые сокращения вида ":),:(" и так далее по нажатию по кнопке на форме переводила в смайлики

287