2010-03-25 10 views
5

OK, no creo que el título lo diga bien ... pero aquí va:Posible cargar un Enum basado en un nombre de cadena?

Tengo una clase con alrededor de 40 entradas. es decir:

Class Hoohoo 
    { 

     public enum aaa : short 
     { 
      a = 0, 
      b = 3 
     } 

     public enum bbb : short 
     { 
     a = 0, 
     b = 3 
     } 

     public enum ccc : short 
     { 
     a = 0, 
     b = 3 
     } 
} 

Ahora decir que tengo un diccionario de cadenas y valores, y cada cadena es el nombre de enumeraciones anteriormente mencionados:

Dictionary<string,short>{"aaa":0,"bbb":3,"ccc":0} 

necesito cambiar "AAA" en HooBoo.aaa a buscar 0. Parece que no se puede encontrar la forma de hacerlo, ya que la enumeración es estática. De lo contrario, tendré que escribir un método para cada enumeración para unirlo a la cadena. Puedo hacerlo, pero eso es mucho código para escribir.

Gracias, Cooter

Respuesta

4

Vas a tener que utilizar la reflexión para obtener el tipo de enumeración subyacente:

Type t = typeof(Hoohoo); 
Type enumType = t.GetNestedType("aaa"); 
string enumName = Enum.GetName(enumType, 0); 

Si desea obtener el valor de enumeración real, a continuación, puede utilizar:

var enumValue = Enum.Parse(enumName, enumType); 
+0

Perfecto. Sabía que habría una respuesta simple ... Gracias. – Cooter

0

¿Quiere convertir una cadena -> enum? This debería ayudar.

2

Uso

aaa myEnum =(aaa) Enum.Parse(typeof(aaa), "a"); 
0

Hemos de tener en cuenta que no se Enum.Parse inflexible de tipos ... calculo que habrá una limitación real en su escenario. Como puede ver en el ejemplo de Ngu, tendría que emitir el resultado.

Cuestiones relacionadas