获取枚举的描述属性在日常C#开发中是一个常见需求。我们可以通过反射的方式获取枚举成员上的Description
属性,从而获取枚举成员对应的描述信息。下面是详细的攻略:
一、为枚举成员添加Description属性
要获取枚举成员的描述信息,我们首先需要为每个枚举成员添加相应的Description
属性,例如:
public enum Gender
{
[Description("男")]
Male,
[Description("女")]
Female
}
以上代码定义了一个Gender
枚举,有两个枚举成员Male
和Female
,分别对应着男
和女
两个描述信息。注意,为了添加Description
属性,需要引入System.ComponentModel
命名空间。
二、获取枚举成员的描述信息
1. 通过反射获取Description属性
使用反射可以很方便地获取枚举成员的描述信息。通过Enum
类的GetField
方法获取字段信息,然后通过GetCustomAttributes
方法获取该字段上的所有特性。具体代码如下:
Gender gender = Gender.Male;
FieldInfo fieldInfo = gender.GetType().GetField(gender.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
string description = attributes.Length > 0 ? attributes[0].Description : gender.ToString();
以上代码获取了Gender.Male
枚举成员的Description
属性,如果该属性存在,则返回相应的描述信息;否则返回枚举成员本身的名称。
2. 使用扩展方法获取Description属性
我们也可以通过扩展方法的方式,为Enum
类添加获取描述信息的方法。具体代码如下:
public static class EnumExtensions
{
public static string GetDescription(this Enum en)
{
Type type = en.GetType();
MemberInfo[] memberInfos = type.GetMember(en.ToString());
if (memberInfos.Length > 0)
{
DescriptionAttribute[] attributes =
(DescriptionAttribute[])memberInfos[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes.Length > 0)
{
return attributes[0].Description;
}
}
return en.ToString();
}
}
以上代码定义了一个EnumExtensions
静态类,为Enum
类添加了一个GetDescription
扩展方法,可以方便地获取枚举成员的描述信息。使用方式如下:
Gender gender = Gender.Male;
string description = gender.GetDescription();
以上代码将返回男
作为Gender.Male
枚举成员的描述信息。如果枚举成员没有定义Description
属性,则返回枚举成员本身的名称。
三、总结
以上就是获取枚举的描述属性的完整攻略。通过添加Description
属性并使用反射或扩展方法,我们可以方便地获取枚举成员的描述信息。在实际开发中,可以根据需求选择不同的方式来实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#如何获取枚举的描述属性详解 - Python技术站