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