¿Cómo obtener una matriz de todos los valores de enumeración en C #?


91

Tengo una enumeración de la que me gustaría mostrar todos los valores posibles. ¿Hay alguna manera de obtener una matriz o lista de todos los valores posibles de la enumeración en lugar de crear manualmente dicha lista? por ejemplo, si tengo una enumeración:

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

¿Cómo podría obtener un contenido List<Enumnum>que contenga { TypeA, TypeB, TypeC, TypeD }?


Respuestas:


162

Esto le da una matriz simple de los valores de enumeración usando Enum.GetValues:

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

Y esto te da una lista genérica:

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

Gracias, exactamente lo que estaba buscando!
Mark LeMoine

5
Esto me hace siempre pregunto por qué Enumnum.GetValues()y Enumnum.GetNames()no existe.
dalle

8
Para una variable de matriz donde se conoce el tipo de elemento en tiempo de compilación, use var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen

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

@ mr5: En su ejemplo, ¿qué debería ActualTypesignificar? Para una enumeración, estaría Enumnumen el ejemplo del OP, o podría ser el tipo subyacente (generalmente int). ¿Tenías algo más en mente?
Dirk Vollmar

16

Prueba este código:

Enum.GetNames(typeof(Enumnum));

Esto devuelve a string[]con todos los nombres de enumeración de la enumeración elegida.


1
Devuelve los nombres de los valores de enumeración; OP parece estar detrás de los valores mismos.
Michael Petrotta

6
Enum.GetValues(typeof(Enumnum));

devuelve una matriz de los valores de Enum.


5

Es posible que desee hacer esto:

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

Todos los valores int de esto enumson 11,22,33,44.

Puede obtener estos valores de esta manera:

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

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



2

con este:

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

y puede acceder a la matriz de valores así:

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

1
Enum.GetValues ​​no devuelve una cadena []
messenger


1

Si prefiere una forma más genérica, aquí está. Puede agregar más convertidores según sus necesidades.

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

    }

Implementaciones de muestra:

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

0

también puedes usar

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

para obtener todos los elementos en enum como formato json.


0

El OP preguntó cómo obtener una matriz de todos los enumvalores en C #?

¿Qué sucede si desea obtener una matriz de enumvalores seleccionados en C #?

Tu enumeración

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Si solo desea seleccionar Sundayde su Enum.

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

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

Los créditos van a tl con conocimientos.

Referencias:

1.

2.

La esperanza ayuda a alguien.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.