Arhn - архитектура программирования

Как получить атрибуты побитового перечисления

У меня есть побитовое перечисление, которое имеет несколько значений, каждое из которых имеет атрибут описания.

    [Flags]
public enum ParkingAreaType
{
    [Description("Car Park")]
    CarPark = 1,

    [Description("Residential Permit")]
    ResidentialPermitZone = 2,

    [Description("Commercial Permit")]
    CommercialPermitZone = 4,

    [Description("On Street Parking")]
    OnStreetParking = 8,

    Any =
        CarPark | ResidentialPermitZone | CommercialPermitZone 
}

Я использовал и пробовал несколько методов расширения, которые я нашел в нескольких других вопросах, очень похожих на этот

Получение атрибутов значения Enum

Как получить атрибуты перечисления

В настоящее время я использую фрагмент кода из John Skeets EnumInternals https://github.com/jskeet/unconstrained-melody/blob/master/UnconstrainedMelody/EnumInternals.cs

private static string GetDescription(T value)
    {
        FieldInfo field = typeof(T).GetField(value.ToString());
        return field.GetCustomAttributes(typeof(DescriptionAttribute), false)
                    .Cast<DescriptionAttribute>()
                    .Select(x => x.Description)
                    .FirstOrDefault();
    }

Приведенный выше код будет работать, если я просто передам одно перечисление, но если я передам побитовое перечисление, он выдаст ссылку на объект. Я пробовал несколько разных вариантов вышеизложенного из разных примеров, но все с тем же результатом.

Я просто не могу понять, как получить список переданных описаний.


Ответы:


1

Это потому, что, например, нет поля с именем CarPark | ResidentialPermitZone | CommercialPermitZone (или CarPark | ResidentialPermitZone и т. д.)

Вам нужно будет получить каждое значение комбинации битов, например:

var result = new List<string>();
foreach (var parkingAreaType in Enum.GetValues(typeof(ParkingAreaType)))
{
    if (value.HasFlag(parkingAreaType))
    {
        result.Add(GetDescription(parkingAreaType));
    }
}
10.06.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..