C# 使用EnumMember属性遍历enum

C# 使用EnumMember属性遍历enum,c#,asp.net,enums,C#,Asp.net,Enums,给定以下enum: public enum JobTypes { [EnumMember (Value = "IN PROGRESS")] IN_PROGRESS, SUBMITTED, [EnumMember (Value = "IN REVIEW")] IN_REVIEW } 我将重复这些步骤,如下所示: foreach (var jobType in Enum.GetValues (typeof(JobTypes))) { Console.

给定以下
enum

public enum JobTypes
{
    [EnumMember (Value = "IN PROGRESS")]
    IN_PROGRESS,
    SUBMITTED,
    [EnumMember (Value = "IN REVIEW")]
    IN_REVIEW
}
我将重复这些步骤,如下所示:

foreach (var jobType in Enum.GetValues (typeof(JobTypes))) {
    Console.WriteLine("{0,3:D} 0x{0:X} {1}", Enum.Parse(typeof(JobTypes), jobType.ToString()), jobType);
}
输出:

// The example displays the following output: 
// 0     0x00000000     IN_PROGRESS 
// 1     0x00000001     SUBMITTED
// 2     0x00000002     IN_REVIEW
// The example displays the following output: 
// 0     0x00000000     IN PROGRESS // no _ character 
// 1     0x00000001     SUBMITTED
// 2     0x00000002     IN REVIEW // no _ character
期望值:

// The example displays the following output: 
// 0     0x00000000     IN_PROGRESS 
// 1     0x00000001     SUBMITTED
// 2     0x00000002     IN_REVIEW
// The example displays the following output: 
// 0     0x00000000     IN PROGRESS // no _ character 
// 1     0x00000001     SUBMITTED
// 2     0x00000002     IN REVIEW // no _ character
仅影响序列化:

EnumMemberAttribute允许在序列化枚举时对其名称进行精细控制


它对调用值的
ToString()
的结果没有任何影响,这实际上就是您在这里所做的。

作为一个补充,为什么要调用
Enum.Parse
当您已经将
jobType
作为type
JobTypes
的值时,@JonSkeet它实际上来自文档:但是当它在名称上迭代时(在这一点上,解析您已经得到的名称是合理的),您正在迭代这些值。为什么你要取一个值,调用
ToString()
,然后解析结果?@JonSkeet我的代码实际上使用
GetNames
,而不是
GetValues
,所以我想我在粘贴问题之前做了太多的CTRL-Z操作?我遇到了一个类似的问题,在一个枚举中迭代,几乎没有成员有描述,但没有所有成员。我编写了一个扩展来获取成员的描述(当然是使用反射),如果描述为空(null),扩展将返回成员的名称。我明白了,谢谢。有没有办法将枚举转换为包含空格的形式?@gotnull:你可以自己用反射来获取属性,或者用“`everywhere using
string.replace
”来替换
。是的,我想现在就必须这样做。谢谢