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


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

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

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

10 68

10 ответов:

Это дает вам простой массив значений enum с помощью Enum.GetValues:

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

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

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

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

Enum.GetNames(typeof(Enumnum));

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

Enum.GetValues(typeof(Enumnum));

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

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

typeof(SomeEnum).GetEnumValues();

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

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.

можно использовать

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

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

С этого:

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

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

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

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

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

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

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

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

ОП спросил, Как получить массив всех 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.

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