今天和大家分享一个给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     }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-21
  • 2022-01-14
  • 2021-10-26
  • 2022-02-04
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-09-28
  • 2022-12-23
  • 2022-03-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案