Come ottenere un array di tutti i valori enum in C #?


91

Ho un'enumerazione di cui vorrei visualizzare tutti i valori possibili. Esiste un modo per ottenere un array o un elenco di tutti i possibili valori dell'enumerazione invece di creare manualmente tale elenco? ad esempio, se ho un enum:

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

come potrei ottenere un List<Enumnum>che contiene { TypeA, TypeB, TypeC, TypeD }?


4
possibile duplicato dell'enumerazione
Mark Byers

Risposte:


162

Questo ti dà un semplice array dei valori enum usando Enum.GetValues:

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

E questo ti dà un elenco generico:

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

Grazie, esattamente quello che stavo cercando!
Mark LeMoine

5
Questo mi fa sempre chiedere perché Enumnum.GetValues()e Enumnum.GetNames()non esiste.
Dalle

8
Per una variabile di matrice in cui il tipo di elemento è noto in fase di compilazione, utilizzare var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen

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

@ mr5: Nel tuo esempio, cosa dovrebbe ActualTypesignificare? Per un enum, sarebbe Enumnumnell'esempio dell'OP o potrebbe essere il tipo sottostante (di solito int). Avevi qualcos'altro in mente?
Dirk Vollmar

16

Prova questo codice:

Enum.GetNames(typeof(Enumnum));

Questo restituisce una string[]con tutti i nomi enum dell'enum scelto.


1
Restituisce i nomi dei valori enum; L'OP sembra essere dopo i valori stessi.
Michael Petrotta

6
Enum.GetValues(typeof(Enumnum));

restituisce una matrice dei valori in Enum.


5

Potresti voler fare in questo modo:

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

Tutti i valori int di questo enumsono 11,22,33,44.

Puoi ottenere questi valori da questo:

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

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


4

Qualcosa di leggermente diverso:

typeof(SomeEnum).GetEnumValues();

2

con questo:

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

e puoi accedere all'array di valori in questo modo:

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

1
Enum.GetValues ​​non restituisce una stringa []
messenger

1

Puoi usare

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

Questo restituisce un array!


1

Se preferisci un modo più generico, eccolo qui. Puoi aggiungere più convertitori secondo le tue necessità.

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

    }

Implementazioni di esempio:

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

0

anche tu puoi usare

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

per ottenere tutti gli elementi in enum come formato json.


0

L'OP ha chiesto come ottenere un array di tutti i enumvalori in C #?

Cosa succede se si desidera ottenere una matrice di enumvalori selezionati in C #?

Il tuo Enum

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Se vuoi solo selezionare Sundaydal tuo file Enum.

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

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

I crediti vanno a knowledtl.

Riferimenti:

1.

2.

La speranza aiuta qualcuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.