不忘本~枚举
嗨!又要和大家一起說說不忘本的文章了,其實我寫的不忘本就是指定C#的一些基礎知識,把基礎知識從書面上拿出來,放到實踐中去講!咱領袖說的好:理論要聯系實際嗎!哈哈!
先看一個最簡單的枚舉enum吧
1 public enum UserBaseColumns 2 3 { 4 5 UserName = 1, 6 7 Age = 2, 8 9 }我們如何去使用它呢,很簡單,如果我們希望拿到UserBaseColumns.UserName這個枚舉元素的值,可以這樣寫(int)UserBaseColumns.UserName,也就是強轉換一下就OK了,因為枚舉和數值類型可以直接轉換的,如果希望得到UserName這個字符呢,即枚舉元素的名稱,我們可以這樣:
Enum.GetName(UserBaseColumns.UserName.GetType(), UserBaseColumns.UserName)
其實為什么要使用枚舉呢?這個問題是比它的基礎知識更重要的,枚舉對于程序員來說是提高了程序的可讀性,對于使用程序的用戶來說,沒有任何意義;我們通常把一些具有固定值的對象創建為枚舉對象,把一些經常發生變化的存儲在數據表中,這也是程序設計的一個常識,例如,一個用戶對象,它有一個狀態字段,而這個字段只有"正常","刪除","禁用"這三種值,那我們為了使用程序員在給對象賦值時的可讀性強,就把這個字段設為枚舉枚舉類型,看代碼
1 public enum Status 2 3 { 4 5 /// <summary> 6 7 /// 正常 8 9 /// </summary> 10 11 Normal = 100, 12 13 /// <summary> 14 15 /// 刪除 16 17 /// </summary> 18 19 Deleted = 400, 20 21 /// <summary> 22 23 /// 禁用 24 25 /// </summary> 26 27 Blocked = 500, 28 29 }而用戶對象就變成了
1 /// <summary> 2 3 /// 用戶實體 4 5 /// </summary> 6 7 public partial class UserBase : IDataEntity 8 9 { 10 11 /// <summary> 12 13 /// 用戶名 14 15 /// </summary> 16 17 public string UserName { get; set; } 18 19 /// <summary> 20 21 /// 年齡 22 23 /// </summary> 24 25 public int Age { get; set; } 26 27 /// <summary> 28 29 /// 狀態 30 31 /// </summary> 32 33 public Status Status { get; set; } 34 35 }以上是枚舉在程序開發中最基礎的用法,現在我再來說說枚舉的一些高級用法,枚舉對象支持位運算,即它支持,加,減運算.
1 [Flags] 2 3 public enum UserBaseColumns 4 5 { 6 7 UserName = 1, 8 9 Age = 2, 10 11 }這是加運算
1 UserBaseColumns enums = new UserBaseColumns(); 2 3 enums = UserBaseColumns.UserName | UserBaseColumns.Age; 這是減運算 1 enums = UserBaseColumns.UserName ^ (~UserBaseColumns.Age); 這是查看元素是否在枚舉合的操作 1 if ((enums & UserBaseColumns.UserName) != 0) 2 3 Console.WriteLine("包括名字字段"); 4 5 else 6 7 Console.WriteLine("不包括名字字段");在C#4.0中已經集成了判斷元素是否在集合的方法:HasFlag
當然我們不提倡用4.0中的方法,因為如果你的frameworks是較低的版本時,這個HasFlag就報錯了,
別外,還有一種將枚舉轉為字符,再去比較它是否存在于集合的方法,下面我給出代碼:
1 /// <summary> 2 3 /// 自定義枚舉指是否在枚舉列表中 4 5 /// </summary> 6 7 public class HasEnum 8 9 { 10 11 private string[] EnumArray = null; 12 13 public HasEnum(Enum enums) 14 15 { 16 17 this.EnumArray = Regex.Split(enums.ToString(), ","); 18 19 if (this.EnumArray.Length < 1) 20 21 throw new Exception("輸入參數異常"); 22 23 } 24 25 public bool HasEnumFlags(Enum entity) 26 27 { 28 29 return EnumArray.Contains(Enum.GetName(entity.GetType(), entity)); 30 31 } 32 33 }好了,講到這里,大家回去做個demo,自己實驗一下吧!如果有疑問,請給我留言!
為了所有enum對象都是繼承為Enum這個抽象類的.它是所有枚舉對象的基類,所以在程序中我們經常這樣寫
?????? 1 /// <summary> 2 3 /// 更新指定字段 4 5 /// </summary> 6 7 /// <param name="entity"></param> 8 9 /// <param name="enums"></param> 10 11 void Update(IDataEntity entity, Enum enums); 上面的編程風格叫做面向接口編程,也叫面向超類編程!在這個例子中Enum就是微軟給我們定義的超類 我們定義的所有枚舉很派生自它. 本文轉自博客園張占嶺(倉儲大叔)的博客,原文鏈接:不忘本~枚舉,如需轉載請自行聯系原博主。總結
- 上一篇: html5--4-3 source元素-
- 下一篇: Android中文API(130) ——