在C#中,我们可以通过反射来获取枚举的描述。这通常是通过将System.ComponentModel.DescriptionAttribute
属性应用于枚举值来完成的。以下是一个简单的示例,展示了如何获取枚举值的描述。
首先,定义一个带有描述属性的枚举:
using System;
using System.ComponentModel;
using System.Reflection;
public enum Colors
{
[Description("红色")]
Red,
[Description("绿色")]
Green,
[Description("蓝色")]
Blue
}
然后,编写一个方法来获取枚举值的描述:
public static string GetEnumDescription(Enum value)
{
FieldInfo field = value.GetType().GetField(value.ToString());
DescriptionAttribute attribute = field.GetCustomAttribute<DescriptionAttribute>();
return attribute == null ? value.ToString() : attribute.Description;
}
使用这个方法来获取描述:
Colors myColor = Colors.Red;
string description = GetEnumDescription(myColor);
Console.WriteLine(description); // 输出: 红色
②用扩展方法实现:
/// <summary>
/// 扩展方法,获得枚举的Description
/// </summary>
/// <param name="value">枚举值</param>
/// <param name="nameInstead">当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用</param>
/// <returns>枚举的Description</returns>
public static string GetDescription(this Enum value, Boolean nameInstead = true)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name == null)
{
return null;
}
FieldInfo field = type.GetField(name);
DescriptionAttribute attribute = System.Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attribute == null && nameInstead == true)
{
return name;
}
return attribute?.Description;
}
//举例 :var color = Colors.Green.GetDescription(); // 得到“绿色”