2010-09-28 11 views
61

Tengo una enumeración de la que me gustaría mostrar todos los valores posibles de. ¿Hay alguna manera de obtener una matriz o una lista de todos los valores posibles de la enumeración en lugar de crear manualmente dicha lista? p.ej. Si tengo una enumeración:¿Cómo obtener una matriz de todos los valores enum en C#?

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

¿cómo iba a ser capaz de obtener un List<Enumnum> que contiene { TypeA, TypeB, TypeC, TypeD }?

+4

posible duplicado de [convertir enum a la lista en C#] (http://stackoverflow.com/questions/1167361/convert-enum-to-list-in-c) –

Respuesta

116

Esto se consigue un array plano de los valores de enumeración utilizando Enum.GetValues:

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

Y esto se obtiene una lista genérica:

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

¡Gracias, exactamente lo que estaba buscando! –

+5

Esto hace que siempre me pregunte por qué 'Enumnum.GetValues ​​()' y 'Enumnum.GetNames()' no existe. – dalle

+4

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));'. –

1

Puede utilizar

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

Esto devuelve una matriz!

6
Enum.GetValues(typeof(Enumnum)); 

devuelve una tabla de los valores de la Enum.

12

probar este código:

Enum.GetNames(typeof(Enumnum)); 

Este devuelven un string[] con todos los nombres de enumeración de la enumeración elegido.

+1

Devuelve * nombres * de los valores enum; OP parece ser después de * los valores * ellos mismos. –

1

con esto:

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

y se puede acceder a los valores de gama de este modo:

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

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

0

también se puede utilizar

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

para obtener todos los elementos de la enumeración como formato JSON .

2

Algo poco diferente:

typeof(SomeEnum).GetEnumValues(); 
1

es posible que desee hacer como esto:

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

Todo int valores de este enum es 11,22,33,44.

Puede obtener estos valores por esto:

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

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

0

Si prefieres una forma más genérica, aquí está. Puede agregar más convertidores según su necesidad.

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

El PO pidieron Cómo obtener una matriz de todos los enum valores en C#?

¿Qué sucede si quiere obtener una matriz de valores enum seleccionados en C#?

Su enumeración

enum WeekDays 
    { 
     Sunday, 
     Monday, 
     Tuesday 
    } 

Si desea seleccionar sólo Sunday de su Enum.

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

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

Créditos va a knowledgel tl.

Referencias:

1.

2.

Esperanza ayuda a alguien.

Cuestiones relacionadas