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


91

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

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

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


Ответы:


162

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

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

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

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

Спасибо, именно то, что я искал!
Mark LeMoine

5
Это заставляет меня всегда задаваться вопросом, почему Enumnum.GetValues()и Enumnum.GetNames()не существует.
далле

8
Для переменной массива, тип элемента которой известен во время компиляции, используйте var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen,

ИлиEnum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
mr5

@ mr5: Что должно ActualTypeзначить в вашем примере ? Для перечисления это может быть Enumnumпример OP или базовый тип (обычно int). Вы еще что-нибудь имели в виду?
Дирк

16

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

Enum.GetNames(typeof(Enumnum));

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


1
Возвращает имена значений перечисления; OP, похоже, после самих значений .
Майкл Петротта


5

Вы можете сделать вот так:

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

Все ИНТ значение этого 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.



2

с этим:

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

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

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

1
Enum.GetValues ​​не возвращает строку []
мессенджер


1

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

    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>();

0

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

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

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


0

OP спросил, как получить массив всех enumзначений в C #?

Что, если вы хотите получить массив выбранных enumзначений в C #?

Ваш Enum

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Если вы хотите просто выбрать Sundayиз своего Enum.

  WeekDays[] weekDaysArray1 = new WeekDays[] { WeekDays.Sunday };

  WeekDays[] weekDaysArray2 = Enum.GetValues(typeof(WeekDays)).Cast<WeekDays>().Where
  (x => x == WeekDays.Sunday).ToArray();

Кредиты достаются знающим тл.

Ссылки:

1.

2.

Надежда кому-то помогает.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.