C# 列舉與位列舉概述
導讀 | C# 列舉(Enum), 列舉型別是用於宣告一組命名的常數的基本資料型別(值型別)。 |
一、列舉的概念
C# 列舉(Enum), 列舉型別是用於宣告一組命名的常數的基本資料型別(值型別);
二、列舉的定義
宣告 enum 變數:
enum{enumeration list};
其中 enum_name 指定列舉的型別名稱,enumeration list 是一個用逗號分隔的識別符號列表;
列舉列表中的每個符號代表一個整數值,一個比他前面的符號大的整數值。預設情況下,第一個列舉符號的值是 0。例如:
enum Days {Sun , Mon, tue, Fir, sat };
三、列舉的案例,列舉變數的用法
例項
using System; namespace EnumApplication { class EnumProgram { enum Days { Sun, Mon, tue, Wed, thu, Fri, sat }; static void Main(string[] args) { int WeekdayStart = (int)Days.Mon; int WeekdayEnd = (int)Days.Fir; Console.WriteLine("Monday:{0}",WeekdayStart); Console.WriteLine("Firday:{0}",WeekdayEnd ); Console.ReadKey(); } } }
四、Enum 類:
所有列舉型別都隱式地繼承 System.Enum 型別, System.Enum 型別是繼承自 System.ValueType 型別唯一不為值型別的引用型別;
五、Enum 類
方法 | 描述 |
---|---|
CompareTo | 將此例項與指定物件進行比較並返回一個對二者的相對值的指示 |
Equals:指示此例項是否等於指定的物件; |
|
Format | 根據指定格式將指定列舉型別的指定值轉換為其等效的字串表示形式 |
GetName | 在指定列舉中檢索具有指定值的常數的名稱 |
GetNames | 檢索指定列舉中常數名稱的陣列 |
GetTypeCode | 返回此例項的基礎TypeCode |
GetUnderlyingTye | 返回指定列舉的基礎型別 |
GetValues | 指定列舉中常數值的陣列 |
HasFlag | 確定當前例項中是否設定了一個或多個位域 |
IsDefined | 返回指定列舉中是否存在具有指定值的常數的指示 |
Parse | 將一個或多個列舉常數的名稱或數字值得字串表示轉換成等效得列舉物件,一個引數指定該操作是否不區分大小寫 |
TryParse | 將一個或多個列舉常數得名稱或數字值得字串表示轉換成等效得列舉物件,用於指示轉換是否成功得返回值 |
六、標誌列舉/位列舉
C# 標記列舉(Flags):列舉型別是用於宣告一組命名得常數得基本型別資料(值型別)。
列舉值是互斥得。而位標記集合是一種由組合出現得元素形成得列表,通常設計為以"位或"運算組合新值。
列舉型別則通常表達一種語義相對獨立得數值集合。而以列舉型別來實現位標記集合是最完美得組合,簡稱位列舉。
七、位列舉得定義
/// /// 許可權列舉 /// [Flags] public enum permission 注意加了[Flags]特性後有三種寫法, { 一種是使用<<符號, Unknown = 0; // 也可以寫成0x00或0 第二種是0x01, 還有一種是直接寫0,1,2,4,8...., Create = 1<<0, // 0x01或1 一般來說是2的n次方來表示。 注:<<左運算子,表示對這個數進行移位。 Read = 1<<1, //0x02或2 Update = 1<<2, //0x04或4 Delete = 1<<3 //0x08或8 }
八、位列舉的例項
//1、給使用者建立、讀取,修改和刪除的許可權 var parmission = Permission.Create | parmission.Read | parmission.Update | parmission.Delete; //2、去掉使用者的修改和刪除許可權 parmission = parmission &~parmission.Update; parmission = parmission &~parmission.Delete; //3、給使用者加上修改的許可權 parmission = parmission | parmission.Update; //4、判斷使用者是否有建立的許可權 var isCreate = (parmission & parmission.Create)!=0; //或者 var isCreate = (parmission & parmission.Create)==parmission.Create; 這時parmission列舉的值將變成0+1+4=5,它的ToSting()將變成“parmission.Create, parmission.Read”,parmission.Update; 這裡我們可以解釋為什麼第五個值Delete是8而不能成為5。 也就是說它的值不應該是前幾項值的複合值。一個比較簡單的方法 就是用2的n次方來依次位每一項賦值,例如:1,2,4,8,16,32,64.......。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2752562/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- c#列舉轉換C#
- C# 中的“智慧列舉”:如何在列舉中增加行為C#
- 在C#中對列舉進行位運算--列舉組合C#
- golang 常量與列舉Golang
- Java 列舉、JPA 和 PostgreSQL 列舉JavaSQL
- C# 列舉遍歷和轉換C#
- 列舉
- 列舉和列舉的取值範圍
- Python元類與列舉類Python
- JavaScript 遍歷、列舉與迭代JavaScript
- Enumeration列舉
- 列舉類
- Java列舉Java
- scala 列舉
- 列舉比較
- 列舉型別型別
- TypeScript 列舉指南TypeScript
- java列舉類Java
- 自定義列舉
- Java 列舉(enum)Java
- 列舉工具類
- Swift-列舉Swift
- TypeScript 列舉enumTypeScript
- Java列舉-通過值查詢對應的列舉Java
- Java enum列舉類詳解 列舉的常見用法Java
- Java基礎(十)——列舉與註解Java
- 第 六小節 常量與列舉
- springboot mybatis列舉配置(每次只需新增一個列舉類即可)Spring BootMyBatis
- Java列舉類與註解詳解——一篇文章讀懂列舉類與註解詳Java
- 列舉子集的方法
- delphi 裡的 列舉
- 【python】Enum 列舉類Python
- TS — 列舉(詳解)
- java中的列舉Java
- 【java基礎】列舉Java
- ENUM列舉型別型別
- Java列舉解讀Java
- 【java】【列舉使用技巧】Java