Jak uzyskać tablicę wszystkich wartości wyliczenia w C #?


91

Mam wyliczenie, dla którego chciałbym wyświetlić wszystkie możliwe wartości. Czy istnieje sposób na uzyskanie tablicy lub listy wszystkich możliwych wartości wyliczenia zamiast ręcznego tworzenia takiej listy? np. jeśli mam wyliczenie:

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

w jaki sposób mógłbym uzyskać, List<Enumnum>który zawiera { TypeA, TypeB, TypeC, TypeD }?


Odpowiedzi:


162

W ten sposób otrzymasz zwykłą tablicę wartości wyliczenia przy użyciu Enum.GetValues:

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

W ten sposób otrzymujesz ogólną listę:

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

Dzięki, dokładnie to, czego szukałem!
Mark LeMoine

5
To sprawia, że ​​zawsze zastanawiam się, dlaczego Enumnum.GetValues()i Enumnum.GetNames()nie istnieje.
dalle

8
W przypadku zmiennej tablicowej, w której typ elementu jest znany w czasie kompilacji, użyj var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen

LubEnum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
5

@ mr5: Co w twoim przykładzie powinno ActualTypeoznaczać? W przypadku wyliczenia byłoby to Enumnumw przykładzie OP lub może to być typ bazowy (zwykle int). Czy miałeś coś innego na myśli?
Dirk Vollmar

16

Wypróbuj ten kod:

Enum.GetNames(typeof(Enumnum));

To zwraca a string[]ze wszystkimi nazwami wyliczeń wybranego wyliczenia.


1
Zwraca nazwy wartości wyliczenia; OP wydaje się dążyć do samych wartości .
Michael Petrotta


5

Możesz to zrobić w ten sposób:

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

Wszystkie wartości int enumto 11,22,33,44.

Możesz uzyskać te wartości w ten sposób:

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

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



2

z tym:

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

i możesz uzyskać dostęp do tablicy wartości w następujący sposób:

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

1
Enum.GetValues ​​nie zwraca ciągu []
messenger


1

Jeśli wolisz bardziej ogólny sposób, oto on. Możesz dodać więcej konwerterów zgodnie z potrzebami.

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

    }

Przykładowe realizacje:

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

0

również możesz użyć

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

aby uzyskać wszystkie elementy w wyliczeniu w formacie json.


0

OP zapytał, jak uzyskać tablicę wszystkich enumwartości w C #?

A jeśli chcesz uzyskać tablicę wybranych enumwartości w C #?

Twój Enum

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Jeśli chcesz po prostu wybrać Sundayplik Enum.

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

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

Kredyty trafiają do znającego się na rzeczy tl.

Bibliografia:

1.

2.

Nadzieja pomaga komuś.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.