Як отримати масив усіх значень переліку в 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()не існує.
— dalle

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
Повертає імена значень переліку; ОП, схоже, переслідує самі цінності .
— Michael Petrotta


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 ​​не повертає рядок []
— messenger


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

ОП запитало про те, як отримати масив усіх enumзначень у C #?

Що робити, якщо ви хочете отримати масив вибраних enumзначень у C #?

Ваш перелік

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

Подяки надходить до обізнаних tl.

Список літератури:

1.

2.

Надія комусь допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.