zoukankan      html  css  js  c++  java
  • 枚举还有这样的用法你知道吗

      有时我们会用玫举定义协议,使用枚举的好处是让代码更加清晰,因为它可以描述特定的值,当然对程序员是如此,稍微看下就明白了,如果要你对非技术做运维,甚至连运维都不是的人,如果你单单告诉他

    某某设备此时返回的命令码是多少多少!此时不仅是体验用户懵了,甚至代码隔的久了,你也会这样说,稍等下我查下文档,不用说,你要是做出这样的效果,客户不满意,上级不满意,更准确来说你也不满意了!

      假如我们定义这样一个枚举,字面意思是懂了,如我们单单说数字1对这个枚举来说,数字1就代表中午。

           

    1 public enum TimeofDay:uint
    2 {
    3     Morning,
    4     Afternoon,
    5     Evening
    6  } ;
    View Code 1

      但如果用一个枚举定义的是一个协议,那么这样就是不够的,我们还需要获取枚举变量的文字描述。重新修订下这个枚举,我们让他加上注释,让他变成如下这样

      

     1 public enum TimeofDay 
     2 {
     3         /// <summary>
     4         /// 未定义
     5         /// </summary>
     6         None,
     7         /// <summary>
     8         /// 早上
     9         /// </summary>
    10         Morning = 1,
    11         /// <summary>
    12         /// 下午
    13         /// </summary>
    14         Afternoon = 3,
    15         /// <summary>
    16         /// 晚上
    17         /// </summary>
    18         Evening = 4
    19 
    20 };
    View Code2

      那么怎么获取TimeOfDay.Morning 代表的意思呢,接下来就是本文想要表述的。主要思想也是用到反射获取它的文字描述。分三步进行,

      第一步:定义一个枚举,因上面定义描述过了,在此不再重复

      第二步:先判断枚举里面有没有定义这个常量,这是很正常的,总不能没有你变个有出来吧

      

     1 /// <summary>
     2 /// 先要判断枚举有没有这个定义,再决定是否进行下一步
     3  /// </summary>
     4 /// <param name="intCmd">命令码</param>
     5 /// <returns>返回值符串</returns>
     6 private string GetDescription(int intCmd)
     7 {
     8        string strReturn = string.Empty;
     9        TimeofDay day = TimeofDay.None;
    10         if (Enum.IsDefined(typeof(TimeofDay), intCmd))
    11         {
    12                 day = (TimeofDay)intCmd;
    13                 strReturn = GetEnumDescription(day);
    14                 return strReturn;
    15          }
    16 
    17         return strReturn;
    18 }
    View Code3

       第三步:为变得通用,需把怎么获取枚举的文字描述单独抽出来

          

     1 /// <summary>
     2 /// 获取枚举的Description 特性
     3 /// </summary>
     4 /// <param name="value">枚举值</param>
     5 /// <returns>描述</returns>
     6 public static string GetEnumDescription(Enum value)
     7 {
     8         System.Reflection.FieldInfo fi =     
     9                  value.GetType().GetField(value.ToString());
    10          DescriptionAttribute[] attributes =
    11                  (DescriptionAttribute[])fi.GetCustomAttributes(
    12                   typeof(DescriptionAttribute), false);
    13          return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
    14 
    15 }
    View Code4
  • 相关阅读:
    python--多线程&多进程
    python--MyRequest请求模块封装
    python--面向对象
    python--异常处理
    python--sys.argv 运行python文件时获取参数
    python--搭建测试环境
    mac常用快捷键
    九、django通过forms对页面数据校验
    八、django后台管理
    七、django页面请求处理
  • 原文地址:https://www.cnblogs.com/jeremylin-Hu/p/9419259.html
Copyright © 2011-2022 走看看