如何在enums
中引用属性?
如果我有以下enum
类型,如何引用此枚举类型的特定值的属性?
public enum PersonGender
{
Unknown = 0,
Male = 1,
Female = 2,
Intersex = 3,
Indeterminate = 3,
[EnumMember("Not Stated")]
NonStated = 9,
[EnumMember("Inadequately Described")]
InadequatelyDescribed = 9
}
答案 0 :(得分:4)
以下代码使用.Net 4.5扩展方法GetCustomAttribute来获取字段
的自定义属性Type enumType = typeof(PersonGender);
var value = enumType.GetField(PersonGender.NonStated.ToString())
.GetCustomAttribute<EnumMemberAttribute>().Value;
// returns "Not Stated"
当然,您应该为字段和自定义属性添加空检查
答案 1 :(得分:1)
您可以使用Reflection
例如:
class EnumMemberAttribute : Attribute
{
private String name;
public String Name
{
get { return this.name; }
set { this.name = value; }
}
public EnumMemberAttribute(String name)
{
this.name = name;
}
}
class Program
{
static void Main(string[] args)
{
Type type = typeof(PersonGender);
MemberInfo[] members = type.GetMember(PersonGender.NonStated.ToString());
Object[] attributes = members[0].GetCustomAttributes(typeof(EnumMemberAttribute),
false);
Console.WriteLine(((EnumMemberAttribute)attributes[0]).Name);
}
}
答案 2 :(得分:0)
首先,将InadequatelyDescribed设置为NonStated以外的其他值。
其次,EnumMembers的正确语法是
[EnumMember(Value = "Not Stated")]
这是解决方案 - 在 .NET 4.0 以及4.5中工作:
PersonGender pg = PersonGender.InadequatelyDescribed;
string pgName = Enum.GetName(typeof(PersonGender), pg);
var t = typeof(PersonGender);
var info = t.GetMember(pgName);
var att = info[0].GetCustomAttributes(typeof(EnumMemberAttribute), false);
if (att.Length > 0)
{
Console.WriteLine(((EnumMemberAttribute)att[0]).Value);
}
else
{
Console.WriteLine(pgName);
}