Wie erhalte ich ein Array aller Aufzählungswerte in C #?


89

Ich habe eine Aufzählung, von der ich alle möglichen Werte anzeigen möchte. Gibt es eine Möglichkeit, ein Array oder eine Liste aller möglichen Werte der Aufzählung abzurufen, anstatt eine solche Liste manuell zu erstellen? zB Wenn ich eine Aufzählung habe:

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

Wie würde ich in der Lage sein, eine zu bekommen List<Enumnum>, die enthält { TypeA, TypeB, TypeC, TypeD }?


Antworten:


158

Auf diese Weise erhalten Sie ein einfaches Array der Aufzählungswerte mit Enum.GetValues:

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

Und das bringt Ihnen eine generische Liste:

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

Danke, genau das, wonach ich gesucht habe!
Mark LeMoine

5
Ich frage mich immer warum Enumnum.GetValues()und Enumnum.GetNames()existiert nicht.
Dale

8
Verwenden Sie für eine Array-Variable, bei der der Elementtyp zur Kompilierungszeit bekannt ist var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen

OderEnum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
mr5

@ mr5: Was soll in deinem Beispiel ActualTypebedeuten? Für eine Aufzählung wäre dies Enumnumdas Beispiel des OP, oder es könnte (normalerweise int) der zugrunde liegende Typ sein . Hattest du noch etwas im Sinn?
Dirk Vollmar

16

Versuchen Sie diesen Code:

Enum.GetNames(typeof(Enumnum));

Dies gibt a string[]mit allen Aufzählungsnamen der gewählten Aufzählung zurück.


1
Gibt Namen der Aufzählungswerte zurück. OP scheint hinter den Werten selbst her zu sein.
Michael Petrotta

6
Enum.GetValues(typeof(Enumnum));

Gibt ein Array der Werte in der Aufzählung zurück.


5

Vielleicht möchten Sie Folgendes tun:

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

Alle int-Werte davon enumsind 11,22,33,44.

Sie können diese Werte folgendermaßen erhalten:

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

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



2

mit diesem:

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

und Sie können wie folgt auf das Werte-Array zugreifen:

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

1
Enum.GetValues ​​gibt keinen String zurück []
Messenger

1

Sie können verwenden

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

Dies gibt ein Array zurück!


1

Wenn Sie einen allgemeineren Weg bevorzugen, hier ist es. Sie können je nach Bedarf weitere Konverter hinzufügen.

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

    }

Beispielimplementierungen:

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

0

auch du kannst verwenden

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

um alle Elemente in Enum als JSON-Format zu erhalten.


0

Das OP fragte nach Wie bekomme ich ein Array aller enumWerte in C #?

Was ist, wenn Sie ein Array ausgewählter enumWerte in C # erhalten möchten ?

Deine Aufzählung

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Wenn Sie nur Sundayaus Ihrem auswählen möchten Enum.

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

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

Credits gehen an sachkundige tl.

Verweise:

1.

2.

Hoffnung hilft jemandem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.