枚举还有这样的用法你知道吗
Posted jeremylin-hu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举还有这样的用法你知道吗相关的知识,希望对你有一定的参考价值。
有时我们会用玫举定义协议,使用枚举的好处是让代码更加清晰,因为它可以描述特定的值,当然对程序员是如此,稍微看下就明白了,如果要你对非技术做运维,甚至连运维都不是的人,如果你单单告诉他
某某设备此时返回的命令码是多少多少!此时不仅是体验用户懵了,甚至代码隔的久了,你也会这样说,稍等下我查下文档,不用说,你要是做出这样的效果,客户不满意,上级不满意,更准确来说你也不满意了!
假如我们定义这样一个枚举,字面意思是懂了,如我们单单说数字1对这个枚举来说,数字1就代表中午。
1 public enum TimeofDay:uint 2 { 3 Morning, 4 Afternoon, 5 Evening 6 } ;
但如果用一个枚举定义的是一个协议,那么这样就是不够的,我们还需要获取枚举变量的文字描述。重新修订下这个枚举,我们让他加上注释,让他变成如下这样
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 };
那么怎么获取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 }
第三步:为变得通用,需把怎么获取枚举的文字描述单独抽出来
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 }
以上是关于枚举还有这样的用法你知道吗的主要内容,如果未能解决你的问题,请参考以下文章