枚舉還有這樣的用法你知道嗎

  有時咱們會用玫舉定義協議,使用枚舉的好處是讓代碼更加清晰,由於它能夠描述特定的值,固然對程序員是如此,稍微看下就明白了,若是要你對非技術作運維,甚至連運維都不是的人,若是你單單告訴他程序員

某某設備此時返回的命令碼是多少多少!此時不只是體驗用戶懵了,甚至代碼隔的久了,你也會這樣說,稍等下我查下文檔,不用說,你要是作出這樣的效果,客戶不滿意,上級不滿意,更準確來講你也不滿意了!運維

  假如咱們定義這樣一個枚舉,字面意思是懂了,如咱們單單說數字1對這個枚舉來講,數字1就表明中午。ide

       

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

  但若是用一個枚舉定義的是一個協議,那麼這樣就是不夠的,咱們還須要獲取枚舉變量的文字描述。從新修訂下這個枚舉,咱們讓他加上註釋,讓他變成以下這樣ui

  

 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 表明的意思呢,接下來就是本文想要表述的。主要思想也是用到反射獲取它的文字描述。分三步進行,spa

  第一步:定義一個枚舉,因上面定義描述過了,在此再也不重複code

  第二步:先判斷枚舉裏面有沒有定義這個常量,這是很正常的,總不能沒有你變個有出來吧blog

  

 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

   第三步:爲變得通用,需把怎麼獲取枚舉的文字描述單獨抽出來ip

      

 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
相關文章
相關標籤/搜索