`

枚举类型帮助类 EnumHelper

    博客分类:
  • C#
 
阅读更多
项目中出现的问题:
项目中会有很多地方用到文字提醒,如果在每个页面都输入相同的文字,后期修改就比较麻烦。


延伸:如果是写api接口不仅要有提示,还得附带错误code值,不同业务类型,code值也应该有差异化


解决思路:
将所有的文字提醒写在一个枚举类型中,通过对枚举类型来管理。
好处:相同的提醒只需更改一次,项目中所有用到的地方都可以更改过来




方法:
首先新建枚举类
/// <summary>
    /// api 响应状态吗
    /// </summary>
    public enum ResultCode
    {
        /// <summary>
        /// 操作成功
        /// </summary>
        [Description("成功")]
        Success = 10000,

        /// <summary>
        ///系统繁忙,请稍后再试
        /// </summary>
        [Description("系统繁忙,请稍后再试")]
        Faild = 10001,

        /// <summary>
        /// 登陆时效已过,请重新登录
        /// </summary>
        [Description("登录时效已过,请重新登录")]
        CustomerTokenError = 10002,

        /// <summary>
        /// 用户不存在
        /// </summary>
        [Description("用户不存在")]
        CustomerNotExist = 20001,

        /// <summary>
        /// 密码不能少于6位
        /// </summary>
        [Description("密码不能少于6位")]
        PasswordIsShort = 20002,


        /// <summary>
        /// 没有数据
        /// </summary>
        [Description("没有数据")]
        NoData = 30001,

        /// <summary>
        /// 没有更多数据
        /// </summary>
        [Description("没有更多数据")]
        NoMoreData = 30002,
    }


    /// <summary>
    /// api 响应实体
    /// </summary>
    public class ResponseResult
    {

        //public string Status { get; set; }
        /// <summary>
        /// 响应状态码
        /// </summary>
        public int Code { get; set; }

        /// <summary>
        /// 响应消息
        /// </summary>
        public string Message { get; set; }
        /// <summary>
        /// 响应时间
        /// </summary>
        public string Time { get; set; }
        /// <summary>
        /// 返回数据
        /// </summary>
        public dynamic Result { get; set; }

        /// <summary>
        /// 根据枚举类型,返回错误代码
        /// </summary>
        /// <param name="code">返回响应码状态枚举</param>
        /// <returns>ResponseResult类</returns>
        public static ResponseResult GenFaildResponse(ResultCode code = ResultCode.Faild)
        {
            return new ResponseResult 
            { 
                Code = (int)code, 
                Message = code.GetDescription(),
                Time = DateTime.Now.ToString() 
            };
        }

        /// <summary>
        /// 执行失败,code:10001,返回错误的data
        /// </summary>
        /// <param name="data">data</param>
        /// <returns></returns>
        public static ResponseResult GenFaildResponse(dynamic data)
        {
            return new ResponseResult
            {
                Code = (int)ResultCode.Faild,
                Message = ResultCode.Faild.GetDescription(),
                Time = DateTime.Now.ToString(),
                Result = data
            };
        }

        /// <summary>
        /// 返回执行失败消息,code:10001 msg=参数
        /// </summary>
        /// <param name="msg">错误消息</param>
        /// <returns>API响应实体</returns>
        public static ResponseResult GenFaildResponse(string msg)
        {
            return new ResponseResult
            {
                Code = (int)ResultCode.Faild,
                Message = msg,
                Time = DateTime.Now.ToString()
            };
        }

        /// <summary>
        /// 执行成功后,返回code:10000 描述:执行成功及数据data
        /// </summary>
        /// <param name="data">要返回的数据,可以为空</param>
        /// <returns>API响应实体</returns>
        public static ResponseResult GenSuccessResponse(dynamic data = null)
        {
            return new ResponseResult 
            { 
                Code = (int)ResultCode.Success, 
                Message = ResultCode.Success.GetDescription(), 
                Time = DateTime.Now.ToString(),
                Result = data 
            };
        }
    }


其次需要一个枚举帮助类,帮我们读取描述文件
public static class EnumHelper
    {
        /// <summary>
        /// 获取枚举变量值的 Description 属性
        /// </summary>
        /// <param name="obj">枚举变量</param>
        /// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
        public static string GetDescription(this Enum obj)
        {
            return GetDescription(obj, false);
        }

        /// <summary>
        /// 获取枚举变量值的 Description 属性
        /// </summary>
        /// <param name="obj">枚举变量</param>
        /// <param name="isTop">是否改变为返回该类、枚举类型的头 Description 属性,而不是当前的属性或枚举变量值的 Description 属性</param>
        /// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
        public static string GetDescription(this Enum obj, bool isTop)
        {
            if (obj == null)
            {
                return string.Empty;
            }
            try
            {
                Type _enumType = obj.GetType();
                DescriptionAttribute dna = null;
                if (isTop)
                {
                    dna = (DescriptionAttribute)Attribute.GetCustomAttribute(_enumType, typeof(DescriptionAttribute));
                }
                else
                {
                    FieldInfo fi = _enumType.GetField(Enum.GetName(_enumType, obj));
                    dna = (DescriptionAttribute)Attribute.GetCustomAttribute(
                       fi, typeof(DescriptionAttribute));
                }
                if (dna != null && string.IsNullOrEmpty(dna.Description) == false)
                    return dna.Description;
            }
            catch
            {
            }
            return obj.ToString();
        }
    }



这样就方便管理了,如果有更好的方法,欢迎大家分享,共同进步
分享到:
评论

相关推荐

    WPF枚举绑定

    对于大量枚举值的情况,为避免枚举枚举时性能问题,可以考虑使用ObservableCollection配合EnumHelper类生成枚举值的集合。 7. 遗留问题与挑战 枚举绑定虽然强大,但也会遇到一些挑战,比如枚举值的排序、枚举值的...

    C#公共类源代码 带帮助文档

    枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类...

    WHC.OrderWater.Commons 伍华聪 公共类源码 类库 帮助文档

    枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类...

    C#公共类通用类非常齐全

    枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类(RMBUtil.cs...

    C#公共通用类

    枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类(RMBUtil.cs...

    aspnet公共类cs文件.rar

    枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类(RMBUtil.cs...

    DotNet公用类(超多附文档)

    6.枚举操作公共类(EnumHelper.cs) 7.身份证操作辅助类(IDCardHelper.cs) 8.检测字符编码的类(IdentifyEncoding.cs) 9.RGB颜色操作辅助类(MyColors.cs) 10.日期操作类(MyDateTime.cs) 11.转换人民币大小金额...

    WHC.OrderWater.Commons公共类源码_文档[最新整理]

    枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类...

    c# 公用操作类库源码

    枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类...

    C sharp辅助类

    20. **枚举操作**:`EnumHelper`提供对枚举类型的扩展方法,如获取枚举值的描述、枚举项的集合等。 以上只是部分知识点,实际的100个C#辅助类可能会涵盖更广泛的内容。这些辅助类体现了C#的面向对象特性,通过封装...

    DotNet通用类库大全

    枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类...

    WHC第三方控件

    6. 枚举操作公共类(EnumHelper.cs) 7. 身份证操作辅助类(IDCardHelper.cs) 8. 检测字符编码的类(IdentifyEncoding.cs) 9. RGB颜色操作辅助类(MyColors.cs) 10. 日期操作类(MyDateTime.cs) 11. 转换人民币大小...

Global site tag (gtag.js) - Google Analytics