考虑这个替代解决方案。您可以使用 DescriptionAttribute 装饰枚举值并使用更人性化的名称:
enum E
{
[System.ComponentModel.Description("FullNameForA")]
A = 1
}
然后您可以像这样提取该属性的值:
public static string AsString(this Enum value)
{
var type = value.GetType();
if (!type.IsEnum)
throw new ArgumentException();
var fieldInfo = type.GetField(value.ToString());
if (fieldInfo == null)
return value.ToString();
var attribs = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false) as DescriptionAttribute[];
return attribs.Length > 0 ? attribs[0].Description : value.ToString();
}
这当然不是性能最好的解决方案,因为它依赖于反射。