2010-03-25 10 views
5

OK, non penso che il titolo lo dica bene ... ma ecco:È possibile caricare un Enum in base al nome di una stringa?

Ho una classe con circa 40 Enum in esso. vale a dire:

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

Ora dire che ho un dizionario di stringhe e valori, ed ogni stringa è il nome di enumerazioni di cui sopra:

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

ho bisogno di cambiare "aaa" in HooBoo.aaa a cercare 0. Non riesco a trovare un modo per farlo poiché l'enum è statico. Altrimenti dovrò scrivere un metodo per ogni enum per legare la stringa ad esso. Posso farlo ma questo è un codice molto da scrivere.

Grazie, Cooter

risposta

4

Dovrete utilizzare la reflection per ottenere il tipo enum sottostante:

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

Se si desidera ottenere il valore reale enum, è possibile utilizzare:

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

Perfetto. Sapevo che ci sarebbe stata una risposta semplice ... Grazie. – Cooter

0

Si desidera convertire una stringa -> enum? This dovrebbe aiutare.

2

Usa

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

Basta tenere a mente che non Enum.Parse è fortemente tipizzato ... mi sa che sarà un vero e proprio limite nello scenario. Come puoi vedere dall'esempio di Ngu dovresti trasmettere l'output.

Problemi correlati