代码之家  ›  专栏  ›  技术社区  ›  MadBoy

如何从枚举中获取成员名称列表?

  •  4
  • MadBoy  · 技术社区  · 15 年前

    这应该是一个相当简单的问题。我正在使用docx库创建新的Word文档。我想制作一个测试词文档,看看每个TableDesign(Enum)如何选择我需要的那个。

    设计\可应用于表格的样式。 名称空间:novacode 程序集:docx(在docx.dll中)版本:1.0.0.10(1.0.0.10)

    Syntax:

    公共枚举表设计

    成员姓名
    习俗
    表格式的
    表格网格
    遮光
    遮光部件1

    等等。我想得到这些表设计的列表,这样我就可以在创建新表的方法中重用它,并为所有可能的情况使用新设计,但我真的不知道如何从该枚举中获取列表:

    foreach (var test in TableDesign) {
          createTable(documentWord, test);
    }
    

    我该怎么做?

    3 回复  |  直到 15 年前
        1
  •  12
  •   MadBoy    15 年前

    我自己找到了答案:

        // get a list of member names from Volume enum,
        // figure out the numeric value, and display
        foreach (string volume in Enum.GetNames(typeof(Volume)))
        {
            Console.WriteLine("Volume Member: {0}\n Value: {1}",
                volume, (byte)Enum.Parse(typeof(Volume), volume));
        }
    

    对于我的具体案例,我使用了:

     foreach (var test in Enum.GetNames(typeof(TableDesign))) {
         testMethod(documentWord, test);
     }
    

    在测试方法中,我已经:

    tableTest.Design = (TableDesign) Enum.Parse(typeof(TableDesign), test); 
    

    它毫无问题地工作(即使速度很慢,但我只是想快速得到一些东西(作为一个计时器的性能并不重要)。

    也许它将来也会帮助别人:—)

        2
  •  4
  •   Steven Sudit    15 年前

    交替地:

    foreach (var volume in Enum.GetValues(typeof(Volume))) 
    { 
        Console.WriteLine("Volume Member: {0}\n Value: {1}", 
            volume, (int) volume); 
    } 
    

    GetValue 将返回 Volume[] 价值观的 enum 美国印刷公司 枚举 值将调用其 ToString() ,以它的名称呈现它。铸造到 int (胜过 byte )会给出它的号码。

        3
  •  0
  •   Adam    15 年前

    我想对《疯子》的答案加上评论,不知道为什么我不能…
    不管怎样,就像他说的那样

    
    foreach (TableDesign t in Enum.GetNames(typeof(TableDesign)))
    {
         // do work
    }
    

    我也认为测试可能是

    
    bool defined = Enum.IsDefined(typeof(TableDesign), value);
    

    看起来更自然
    最后,关于性能问题,我认为Enum通常很小,所以我一点也不担心