我想从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;
}
答案 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();