Получение аннотации Enum по индексу ASP.NET CORE

101
07 декабря 2019, 10:40

Как получить аннотацию Enum по индексу. Я получаю индекс 1. И хотел бы вывести на VIEW результат, чтобы выводилось "Брестская".

public enum Region
        {
            [Display(Name = "Брестская")]
            Brest = 1,
            [Display(Name = "Витебская")]
            Vitebsk = 2,
            [Display(Name = "Гомельская")]
            Gomel = 3,
            [Display(Name = "Гродненская")]
            Grodno = 4,
            [Display(Name = "Минская")]
            Minsk = 5,
            [Display(Name = "Могилевская")]
            Mogilev = 6
        }
Answer 1
public enum Region
{
    [Display(Name = "Брестская")]
    Brest = 1,
    [Display(Name = "Витебская")]
    Vitebsk = 2,
    [Display(Name = "Гомельская")]
    Gomel = 3,
    [Display(Name = "Гродненская")]
    Grodno = 4,
    [Display(Name = "Минская")]
    Minsk = 5,
    [Display(Name = "Могилевская")]
    Mogilev = 6
}
public static class EnumDisplayExtensions
{
    public static string GetDisplayName(this Enum enumValue)
    {
        //определяем тип параметра и извлекаем массив его публичных членов по имени
        MemberInfo[] memberInfo = enumValue.GetType().GetMember(enumValue.ToString());
        //определяем тип класса атрибута
        Type attributeType = typeof(DisplayAttribute);
        //у первого публичного члена пытаемся получить массив
        //атрибутов типа DisplayAttribute
        object[] attributes = memberInfo[0].GetCustomAttributes(attributeType, false);
        //если поиск безуспешен или почему-то таких атрибутов найдено больше одного
        //вываливаем ошибку
        if (attributes == null || attributes.Length != 1)
            throw new ArgumentOutOfRangeException($"Невозможно найти атрибут по имени '{nameof(DisplayAttribute)}'");
        //хватаем атрибут
        var attribute = attributes.SingleOrDefault() as DisplayAttribute;
        //возвращаем значение его свойства по имени Name
        return attribute?.Name;      
    }
}
class Program
{
    static void Main(string[] args)
    {
        int index = 1;
        Region region = (Region)index;
        string displayName = region.GetDisplayName();
        Console.WriteLine(displayName);
        Console.ReadKey();
    }
}
READ ALSO
ASP.NET Маршрутизация ссылок

ASP.NET Маршрутизация ссылок

Каким образом можно создать маршрут: localhost:port/folder?path=S, где S это переменная принимающая значение

108
обновление ListView из ViewModel без ObservableCollection

обновление ListView из ViewModel без ObservableCollection

У меня на форме есть ListView который сбиндин с коллекцией List находящейся во ViewModel

106
Объекты в коллайдере 2D

Объекты в коллайдере 2D

Не могу разобраться как получить список объектов в коллайдереНюанс в том, что несколько объектов появляются одновременно и ОнТриггерИнтео...

114
Передать из 1 viewmodel значения во вторую

Передать из 1 viewmodel значения во вторую

Использую WPF и паттерн MVVMХочу передать из одной viewmodel в другую значения(допустим текст)

142