2011-07-23 8 views
9

D2のenumタイプの名前と値を取得したいと考えています。私はstd.traitsを使ってenum値を得ることができますが、名前はどうですか?Dの列挙型のメンバーの名前と値を取得することは可能ですか?

を考える:

enum lst 
{ 
    apple, 
    bottle, 
    orange, 
    blue  
} 

私のような連想配列を取得したいと思います。

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

答えはイエスです。誰かが私に示したように、溶液は、次のとおりです。

(コミュニティのwikiとして質問からコピーされた)
foreach (i, member; __traits(allMembers, lst)) { 
    lstmap[cast(int) __traits(getMember, lst, member)] = member; 
} 
+2

あなたは答えをあなた自身で提出し、受け入れられたとしてマークして、質問がもはや未回答として現れないようにしてください。 – klickverbot

答えて

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

2

あなたは、これは単に値からストリングconvertationの目的のために、std.conv.to!string(lst.orange)を使用することを検討したい場合 - "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

あなたの答えはC#であり、Dではありません – Nekuromento

関連する問題