using System.ComponentModel.DataAnnotations;
using System.Reflection;
using NSExt.Attributes;
namespace NSExt.Extensions;
///
/// EnumExtensions
///
public static class EnumExtensions
{
///
/// 获取显示特性
///
public static DisplayAttribute GetDisplay(this Enum me)
{
return me.GetAttributeOfType();
}
///
/// 获取枚举的本地化资源描述
///
public static string ResDesc(this Enum e)
{
var typeOfEnum = e.GetType();
var typeOfField = typeOfEnum.GetField(Enum.GetName(typeOfEnum, e)!);
var resDescAttr = typeOfField!.GetCustomAttribute>(true);
return resDescAttr is null
? Enum.GetName(typeOfEnum, e)
: typeof(T).GetProperty(resDescAttr.ResourceName)?.GetValue(default) as string;
}
///
/// 通过类泛型类型获取特性
///
private static T GetAttributeOfType(this Enum me)
where T : Attribute
{
return me.GetType().GetMember(me.ToString())[0].GetCustomAttributes(false).FirstOrDefault();
}
}