是否有可能在D中获取枚举成员的名称和值?

时间:2011-07-23 07:55:21

标签: reflection d

我想从D2中的enum类型中获取名称和值。我知道我可以使用std.traits获取枚举值,但名称呢?

假设:

enum lst
{
  apple,
  bottle,
  orange,
  blue    
}

我想获得一个类似的关联数组。

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

答案是肯定的。有人向我展示的解决方案是:

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

3 个答案:

答案 0 :(得分:13)

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

(从问题中复制为社区维基)

答案 1 :(得分:2)

如果您只想将其用于价值转换的目的,请考虑使用std.conv.to!string(lst.orange) - 评估为"orange"

答案 2 :(得分:-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();