Comment obtenir un tableau de toutes les valeurs d'énumération en C #?

91

J'ai une énumération dont j'aimerais afficher toutes les valeurs possibles. Existe-t-il un moyen d'obtenir un tableau ou une liste de toutes les valeurs possibles de l'énumération au lieu de créer manuellement une telle liste? Par exemple, si j'ai une énumération:

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

comment pourrais-je obtenir un List<Enumnum>qui contient { TypeA, TypeB, TypeC, TypeD }?

Mark LeMoine
la source
4
duplication possible de convertir enum en liste en c #
Mark Byers

Réponses:

162

Cela vous donne un tableau simple des valeurs d'énumération en utilisant Enum.GetValues:

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

Et cela vous donne une liste générique:

var valuesAsList = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList();
Dirk Vollmar
la source
Merci, exactement ce que je cherchais!
Mark LeMoine
5
Cela me fait toujours me demander pourquoi Enumnum.GetValues()et Enumnum.GetNames()n'existe pas.
dalle
8
Pour une variable de tableau dont le type d'élément est connu au moment de la compilation, utilisez var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen
OuEnum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
mr5
@ mr5: Dans votre exemple, que devrait ActualTypesignifier? Pour une énumération, ce serait Enumnumdans l'exemple de l'OP, ou ce pourrait être le type sous-jacent (généralement int). Avez-vous autre chose en tête?
Dirk Vollmar
16

Essayez ce code:

Enum.GetNames(typeof(Enumnum));

Ceci renvoie un string[]avec tous les noms d'énumération de l'énumération choisie.

Øyvind Bråthen
la source
1
Renvoie les noms des valeurs d'énumération; OP semble être après les valeurs elles-mêmes.
Michael Petrotta
6
Enum.GetValues(typeof(Enumnum));

renvoie un tableau des valeurs de Enum.

duraz0rz
la source
5

Vous voudrez peut-être faire comme ceci:

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

Toutes les valeurs int de ceci enumsont 11,22,33,44.

Vous pouvez obtenir ces valeurs par ceci:

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

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

Ali Soltani
la source
4

Quelque chose de peu différent:

typeof(SomeEnum).GetEnumValues();
Termininja
la source
2

avec ça:

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

et vous pouvez accéder au tableau de valeurs comme ceci:

Array myArray = Enum.GetValues(typeof(Enumnum));
Dr TJ
la source
1
Enum.GetValues ​​ne renvoie pas de chaîne []
messenger
1

Vous pouvez utiliser

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

Cela renvoie un tableau!

Vendeurs Mitchel
la source
1

Si vous préférez une manière plus générique, la voici. Vous pouvez ajouter plus de convertisseurs selon vos besoins.

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

    }

Exemples d'implémentations:

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

aussi vous pouvez utiliser

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

pour obtenir tous les éléments enum au format json.

ModernNet
la source
0

L'OP a demandé comment obtenir un tableau de toutes les enumvaleurs en C #?

Que faire si vous souhaitez obtenir un tableau de enumvaleurs sélectionnées en C #?

Votre énumération

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Si vous souhaitez simplement sélectionner Sundayvotre fichier Enum.

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

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

Crédits va à tl bien informé.

Références:

1.

2.

L'espoir aide quelqu'un.

shaijut
la source