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

C# 如何从枚举中获取成员名称列表?,c#,enums,C#,Enums,这应该是一个相当简单的问题。我正在使用DocX库创建新的word文档。我想制作一个测试word文档,看看每个TableDesign(enum)如何选择我需要的一个 可应用于表格的设计\样式。 名称空间:Novacode 程序集:DocX(在DocX.dll中)版本:1.0.0.10(1.0.0.10) 语法: 公共枚举表设计 成员名称 自定义 TableNormal TableGrid 明暗处理 LightShadingAccent1 等等。我想获得这些TableDesign的列表,这样我就可

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

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

语法:

公共枚举表设计

成员名称
自定义
TableNormal
TableGrid
明暗处理
LightShadingAccent1

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

foreach (var test in TableDesign) {
      createTable(documentWord, test);
}
我怎么知道

我自己找到了答案:

    // 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);
 }
在testMethod中,我已经:

tableTest.Design = (TableDesign) Enum.Parse(typeof(TableDesign), test); 
它可以毫无问题地工作(即使速度很慢,但我只是想快速完成任务(而一次完成任务并不重要)

也许它将来也会帮助某人:-)

或者:

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

GetValue
将返回值的
Volume[]
作为
enum
s。打印
enum
值将调用其
ToString()
,并按其名称呈现。转换到
int
(比
byte
更好)将给出其编号。

我想对MadBoy的答案添加一条评论,不知道为什么我不能…
不管怎么说,就像他说的那样,这就是出路


foreach (TableDesign t in Enum.GetNames(typeof(TableDesign)))
{
     // do work
}
此外,我认为测试可能类似


bool defined = Enum.IsDefined(typeof(TableDesign), value);
这看起来更自然了

最后,关于性能问题,我认为枚举往往非常小,因此我一点也不担心

如果枚举由具有已知开始和停止的顺序值组成,则只在枚举(或其int等价物)上循环会更简单。上面的方法很慢。我已经将帖子更新到我实际使用的内容。正是来自不同来源的复制粘贴让我在如何使用它(或多或少)方面领先。不需要表演。仅使用一次:-作为旁白,如果您试图向用户显示<代码> EnUM<代码>代码,您应该考虑使用属性来装饰它们(例如,代码>描述符属性< /代码>)。我觉得直接向用户显示变量名是一种不好的习惯。在一般情况下,我认为向用户显示枚举值名称没有什么害处,尤其是符合C#命名标准(CamelCase)的名称。显示与这些名称对应的整数值可能不是一个好主意,基于枚举值的完整信息可能更可取,但我看不出有什么害处。@Yuriy:纠正美国人的英语很有趣,我编辑了它以删除这些错误,所以您也可以删除您的注释。:-)是的,这是更快的,稍微不复杂。不过,我还是不认为这很快。