Подтвердить что ты не робот

Как получить массив всех значений перечисления в С#?

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

public enum Enumnum { TypeA, TypeB, TypeC, TypeD }

как я могу получить List<Enumnum>, который содержит { TypeA, TypeB, TypeC, TypeD }?

4b9b3361

Ответ 1

Это дает вам простой массив значений перечисления, используя Enum.GetValues:

var valuesAsArray = Enum.GetValues(typeof(Enumnum));

И это дает вам общий список:

var valuesAsList = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList();

Ответ 2

Попробуйте этот код:

Enum.GetNames(typeof(Enumnum));

Это возвращает a string[] со всеми именами перечислений выбранного перечисления.

Ответ 3

Enum.GetValues(typeof(Enumnum));

возвращает массив значений в Enum.

Ответ 4

Что-то немного другое:

typeof(SomeEnum).GetEnumValues();

Ответ 5

Вы можете использовать

Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().ToArray();

Возвращает массив!

Ответ 6

с этим:

string[] myArray = Enum.GetNames(typeof(Enumnum));

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

Array myArray = Enum.GetValues(typeof(Enumnum));

Ответ 7

Возможно, вы захотите сделать следующее:

public enum Enumnum { 
            TypeA = 11,
            TypeB = 22,
            TypeC = 33,
            TypeD = 44
        }

Все значения int этого enum равны 11,22,33,44.

Вы можете получить эти значения следующим образом:

var enumsValues = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList().Select(e => (int)e);

string.Join(",", enumsValues) - 11,22,33,44.

Ответ 8

также вы можете использовать

var enumAsJson=typeof(SomeEnum).Name + ":[" + string.Join(",", Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().Select(e => e.ToString())) + "]";

для получения всех элементов в перечислении в формате json.

Ответ 9

Если вы предпочитаете более общий способ, вот он. Вы можете добавить больше конвертеров в соответствии с вашими потребностями.

    public static class EnumConverter
    {

        public static string[] ToNameArray<T>()
        {
            return Enum.GetNames(typeof(T)).ToArray();
        }

        public static Array ToValueArray<T>()
        {
            return Enum.GetValues(typeof(T));
        }

        public static List<T> ToListOfValues<T>()
        {
            return Enum.GetValues(typeof(T)).Cast<T>().ToList();
        }


        public static IEnumerable<T> ToEnumerable<T>()
        {
            return (T[])Enum.GetValues(typeof(T));
        }

    }

Примеры реализации:

   string[] roles = EnumConverter.ToStringArray<ePermittedRoles>();
   List<ePermittedRoles> roles2 = EnumConverter.ToListOfValues<ePermittedRoles>();
   Array data = EnumConverter.ToValueArray<ePermittedRoles>();