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