2011-07-23 5 views
9

Me gustaría obtener los nombres y valores de un tipo enum en D2. Sé que puedo obtener valores enum usando std.traits, pero ¿qué pasa con los nombres?¿Es posible obtener los nombres y valores de los miembros de una enumeración en D?

dado:

enum lst 
{ 
    apple, 
    bottle, 
    orange, 
    blue  
} 

me gustaría obtener una matriz asociativa similares.

string lstmap[int] = [1:"apple", 2:"bottle", 3:"orange", 4:"blue"]. 

La respuesta es sí. La solución, como alguien me mostró es:

foreach (i, member; __traits(allMembers, lst)) { 
    lstmap[cast(int) __traits(getMember, lst, member)] = member; 
} 
+2

¿Podría enviar la respuesta usted mismo y marcarla como aceptada, para que la pregunta ya no se muestre como sin respuesta? – klickverbot

Respuesta

13
foreach (i, member; __traits(allMembers, lst)) { 
    lstmap[cast(int) __traits(getMember, lst, member)] = member; 
} 

(copiado de la pregunta como wiki de la comunidad)

2

En caso de que quiera esto únicamente con fines de convertation valor-cadena, considerar el uso de std.conv.to!string(lst.orange) - evaluará a "orange".

-1
 //ENUMList is the name of Enum 

     var values = (ENUMList[])Enum.GetValues(typeof(ENUMList)); 
     var query = from name in values 
        select new EnumData//EnumData is a Modal or Entity 
        { 
         ID = (short)name, 
         Name = GetEnumDescription(name)//Description of Particular Enum Name 
        }; 
     return query.ToList(); 
+0

Tu respuesta es para C#, no D – Nekuromento

Cuestiones relacionadas