2011-07-23 13 views
9

Chciałbym uzyskać nazwy i wartości z typu enum w D2. Wiem, że mogę uzyskać wartości enum przy użyciu std.traits, ale co z nazwami?Czy można uzyskać nazwy i wartości członków enum w D?

Dane:

enum lst 
{ 
    apple, 
    bottle, 
    orange, 
    blue  
} 

Chciałbym dostać tablicę asocjacyjną podobnego.

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

Odpowiedź brzmi: tak. Rozwiązaniem, jak ktoś pokazał mi to:

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

Czy możesz przesłać odpowiedź samodzielnie i oznaczyć ją jako zaakceptowaną, aby pytanie nie było już wyświetlane jako bez odpowiedzi? – klickverbot

Odpowiedz

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

(skopiowane z pytaniem jak Wiki)

2

w przypadku chcesz to wyłącznie dla celów wartość na ciąg znaków konwertowanie, należy rozważyć użycie std.conv.to!string(lst.orange) - oceni na "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

Twoja odpowiedź dotyczy C#, a nie D – Nekuromento

Powiązane problemy