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 }?

Mark LeMoine
quelle
4
Mögliches Duplikat der Konvertierung von Enum in Liste in c #
Mark Byers

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();
Dirk Vollmar
quelle
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.

Øyvind Bråthen
quelle
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.

duraz0rz
quelle
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.

Ali Soltani
quelle
4

Etwas anderes:

typeof(SomeEnum).GetEnumValues();
Termininja
quelle
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));
Dr. TJ
quelle
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!

Mitchel Sellers
quelle
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>();
Ozesh
quelle
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.

ModernNet
quelle
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.

Shaijut
quelle