zoukankan      html  css  js  c++  java
  • 自定义枚举特性

            新增一个枚举扩展类

    /// <summary>
    /// 枚举扩展特性
    /// </summary>
    [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; }
      }
      /// <summary>
      /// 枚举特性
      /// </summary>
      /// <param name="code">消息码</param>
      /// <param name="msg">枚举消息描述</param>
      public ApiEnum(string code,string msg)
      {
        this._code = code;
        this._msg = msg;
      }

      /// <summary>
      /// 获取枚举消息码
      /// </summary>
      /// <param name="obj"></param>
      /// <returns></returns>
      public static string GetCode(Enum obj)
      {
        var fAttrs = GetFieldInfo(obj);
        return fAttrs.Length > 0 ? ((ApiEnum)fAttrs[0]).Code : string.Empty;
      }
      /// <summary>
      /// 获取枚举消息描述
      /// </summary>
      /// <param name="obj"></param>
      /// <returns></returns>
      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);
      }

      在枚举中这么使用:

    /// <summary>
    /// api响应报文枚举
    /// </summary>
    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)) { }
  • 相关阅读:
    网络技术全方位解析之三:RAID
    Linux系统安全隐患及加强安全管理的方法
    Silverlight 程序架构
    (转载)Qt:给QLineEdit加上一个搜索按钮
    (转载)StarUML启动时候出现"System Error. Code:1722. RPC服务器不可用."错误的解决办法
    (转载)starUML connect elements exactly
    (转载)Qt:拖拽图片到QLabel上并显示
    (转载)Qt:禁止qDebug的输出
    (转载)葱的营养价值和食用功效
    (转载)Qwt的安装与使用
  • 原文地址:https://www.cnblogs.com/fallTakeMan/p/11686243.html
Copyright © 2011-2022 走看看