枚举类型帮助类 EnumHelper
程序员文章站
2022-06-02 22:43:40
...
项目中出现的问题:
项目中会有很多地方用到文字提醒,如果在每个页面都输入相同的文字,后期修改就比较麻烦。
延伸:如果是写api接口不仅要有提示,还得附带错误code值,不同业务类型,code值也应该有差异化
解决思路:
将所有的文字提醒写在一个枚举类型中,通过对枚举类型来管理。
好处:相同的提醒只需更改一次,项目中所有用到的地方都可以更改过来
方法:
首先新建枚举类
其次需要一个枚举帮助类,帮我们读取描述文件
这样就方便管理了,如果有更好的方法,欢迎大家分享,共同进步
项目中会有很多地方用到文字提醒,如果在每个页面都输入相同的文字,后期修改就比较麻烦。
延伸:如果是写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(); } }
这样就方便管理了,如果有更好的方法,欢迎大家分享,共同进步
下一篇: C#基础算法题 找出最大值和最小值