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

发布于 2024-11-26 08:05:37 字数 463 浏览 1 评论 0原文

我想从 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;
}

I would like to get the names and values from an enum type in D2. I know I can get enum values using std.traits but what about the names?

Given:

enum lst
{
  apple,
  bottle,
  orange,
  blue    
}

I would like to get an associative array like.

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

The answer is yes. The solution, as someone showed me is:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

抠脚大汉 2024-12-03 08:05:37
foreach (i, member; __traits(allMembers, lst)) {
  lstmap[cast(int) __traits(getMember, lst, member)] = member;
}

(从社区维基的问题复制)

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

(copied from question as community wiki)

執念 2024-12-03 08:05:37

如果您只想将其用于值到字符串的转换,请考虑使用 std.conv.to!string(lst.orange) — 将计算为 "orange"

In case you want this solely for purposes of value-to-string convertation, consider using std.conv.to!string(lst.orange) — will evaluate to "orange".

离旧人 2024-12-03 08:05:37
      //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();
      //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();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文