Существует ли способ выполнить итерации и отразить имена элемента и значения, содержавшиеся в перечислениях?

Скажем, у меня есть следующее enum:

public enum Colors
{
    White = 10,
    Black = 20,
    Red = 30,
    Blue = 40
}

Я задаюсь вопросом, существует ли способ выполнить итерации через всех членов Colors найти имена элемента и их значения.

7
задан tshepang 6 March 2014 в 09:19
поделиться

2 ответа

Вы можете использовать Enum .GetNames и Enum.GetValues ​​:

var names = Enum.GetNames(typeof(Colors));
var values = Enum.GetValues(typeof(Colors));

for (int i=0;i<names.Length;++i)
{
    Console.WriteLine("{0} : {1}", names[i], (int)values.GetValue(i));
}

Примечание. Когда я попытался запустить код, используя values ​​[i] , возникла исключительная ситуация, поскольку values ​​ имеет тип Array .

12
ответ дан 6 December 2019 в 19:36
поделиться

Вы можете сделать что-то вроде этого.

  for (int i = 0; i < typeof(DepartmentEnum).GetFields().Length - 1; i++)
            {
                DepartmentEnum de = EnumExtensions.NumberToEnum<DepartmentEnum>(i);
                pairs.Add(new KeyValuePair<string, string>(de.ToDescription(), de.ToString()));
            }

Вот само расширение:

  public static class EnumExtensions
    {
        public static string ToDescription(this Enum en) 
        {
            Type type = en.GetType();

            MemberInfo[] memInfo = type.GetMember(en.ToString());

            if (memInfo != null && memInfo.Length > 0)
            {
                object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false);

                if (attrs != null && attrs.Length > 0)

                    return ((DescriptionAttribute)attrs[0]).Description;
            }

            return en.ToString();
        }

        public static TEnum NumberToEnum<TEnum>(int number )
        {
            return (TEnum)Enum.ToObject(typeof(TEnum), number);
        }
    }
1
ответ дан 6 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: