Как создать список объектов из enum - PullRequest
0 голосов
/ 08 мая 2020

ниже - это Enum, из которого мне нужно заполнить список объектов

public enum Scope
    {
        [Description("Organization")]
        Organization = 100,
        [Description("Organization@Unit")]
        Organization_Unit = 200,
        [Description("Organization@Unit@User")]
        Organization_Unit_User = 300
    }

Мне нужно создать список объектов из этого Enum

Скелет объекта будет таким, как показано ниже

public class ScopeKVP {
  public string key {get;set;}
  public int value {get;set;}
}

В конце мне нужен список объектов из перечисления, в котором description каждого перечисления должно быть сохранено в свойстве key объекта, а value перечисления должно быть сохранено в свойстве value объекта, например ниже

var scopeKvp = new List<ScopeKVP> {
    new ScopeKVP {key= 100,value="Organization"},
    new ScopeKVP {key= 200,value="Organization@Unit"},
    new ScopeKVP {key= 300,value="Organization@Unit@User"}
}

1 Ответ

0 голосов
/ 08 мая 2020

Это то, что вам нужно сделать:

  1. Использовать отражение, чтобы получить информацию о перечислении, его полях
  2. L oop поля
  3. Возьмите их значение с помощью GetValue метода
  4. Возьмите описание атрибута Description, которое вы передали его конструктору
  5. Создайте объект типа ScopeKVP и добавьте его в список результатов

Код:

    Type enumType = typeof(Scope);
    FieldInfo[] fields = enumType.GetFields();

    List<ScopeKVP> scopeKvp = new List<ScopeKVP>();
    foreach (FieldInfo field in fields)
    {
        if (field.IsLiteral)
        {
            DescriptionAttribute descAttr = (DescriptionAttribute)Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));

            ScopeKVP item = new ScopeKVP()
            {
                key = descAttr.Description,
                value = (int)field.GetValue(null)
            };

            scopeKvp.Add(item);
        }
    }

    // scopeKvp is what you need

PS, как и в комментариях выше, у вас есть несоответствие для key, которое является строкой, и вы ожидаете целое число. Думаю, это опечатка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...