今天和大家分享一个给Enum加备注的技巧,话不多说,先上一段代码:
1 namespace TestReflector.Model.Entities 2 { 3 public class UserInfo 4 { 5 public int Id { get; set; } 6 7 public string Name { get; set; } 8 9 public UserStatusEnum UserStatus { get; set; } 10 } 11 12 public enum UserStatusEnum 13 { 14 /// <summary> 15 /// 待审核 16 /// </summary> 17 WaitAudit, 18 19 /// <summary> 20 /// 审核中 21 /// </summary> 22 Auditing, 23 24 /// <summary> 25 /// 已审核 26 /// </summary> 27 Audited 28 } 29 }
相信大家在项目中都遇到过这种情况吧,用户的状态只是一个枚举,但UI层确需要显示对应的提示信息(例如“待审核”)。
怎样将Enum转换为字符串,写个转换方法?No!!!
下面介绍一种插入元数据的方式来实现此功能,使代码易维护,又不会分散在各个地方:
1. 首先建立一个工具类:
1 /// <summary> 2 /// 枚举类型扩展方法类 3 /// </summary> 4 public static class EnumExtention 5 { 6 /// <summary> 7 /// 获取枚举值的详细文本[Description] 8 /// </summary> 9 /// <param name="target"></param> 10 /// <returns></returns> 11 public static string GetDescription(this System.Enum target) 12 { 13 Type t = target.GetType(); 14 //获取字段信息 15 System.Reflection.FieldInfo[] fieldInfos = t.GetFields(); 16 foreach (System.Reflection.FieldInfo info in fieldInfos) 17 { 18 //判断名称是否相等 19 if (info.Name != target.ToString()) continue; 20 21 #region 4.5 22 ////反射出自定义属性 23 //var dscript = info.GetCustomAttribute<DescriptionAttribute>(true); 24 ////类型转换找到一个Description,用Description作为成员名称 25 //if (dscript != null) 26 // return dscript.Description; 27 #endregion 28 29 #region 3.5 30 //反射出自定义属性 31 foreach (Attribute attr in info.GetCustomAttributes(true)) 32 { 33 //类型转换找到一个Description,用Description作为成员名称 34 var dscript = attr as DescriptionAttribute; 35 if (dscript != null) 36 return dscript.Description; 37 } 38 #endregion 39 } 40 41 //如果没有检测到合适的注释,则用默认名称 42 return target.ToString(); 43 } 44 45 }