自定义枚举特性
新增一个枚举扩展类
///
/// 枚举扩展特性
///
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
public class ApiEnum : Attribute
{
private string _code;
private string _msg;
public string Code
{
get { return _code; }
set { _code = value; }
}
public string Message
{
get { return _msg; }
set { _msg = value; }
}
///
/// 枚举特性
///
/// 消息码
/// 枚举消息描述
public ApiEnum(string code,string msg)
{
this._code = code;
this._msg = msg;
}
///
/// 获取枚举消息码
///
///
///
public static string GetCode(Enum obj)
{
var fAttrs = GetFieldInfo(obj);
return fAttrs.Length > 0 ? ((ApiEnum)fAttrs[0]).Code : string.Empty;
}
///
/// 获取枚举消息描述
///
///
///
public static string GetMessage(Enum obj)
{
var fAttrs = GetFieldInfo(obj);
return fAttrs.Length > 0 ? ((ApiEnum)fAttrs[0]).Message : string.Empty;
}
private static object[] GetFieldInfo(Enum obj)
{
var type = obj.GetType();
var fieldName = Enum.GetName(type, obj);
return type.GetField(fieldName).GetCustomAttributes(typeof(ApiEnum), false);
}
在枚举中这么使用:
////// api响应报文枚举 /// public enum ApiRespCode { [ApiEnum("000000","response succeed.")] S000000, [ApiEnum("400000","请求参数验证失败:{0}")] F400000, [ApiEnum("999999","system error.")] E999999 }
当然,枚举code和message使用英文和中文描述,用户体验会更好。
获取枚举code或者message的用法:
public ApiException(ApiRespCode apiRespCode) : base(ApiEnum.GetMessage(apiRespCode)) { }