C#枚舉的簡單使用

枚舉這個名詞你們都聽過,不少小夥伴也使用過,html

那麼枚舉在開發中能作什麼,使用它後能給程序代碼帶來什麼改變,爲何用枚舉。sql

各位看官且坐下,聽我一一道來。數據庫


 

爲何使用枚舉?數組

一、枚舉可以使代碼更加清晰,它容許使用描述性的名稱表示整數值。ui

二、枚舉使代碼更易於維護,有助於確保給變量指定合法的、指望的值。spa

三、枚舉使代碼更易輸入和讀取。code


 

枚舉有哪些用法?orm

一、簡單枚舉htm

二、標誌枚舉對象


 

一、簡單枚舉

  • 枚舉使用enum關鍵字來聲明,與類同級。枚舉自己能夠有修飾符,但枚舉的成員始終是公共的,不能有訪問修飾符。枚舉自己的修飾符僅能使用public和internal。
  • 枚舉是值類型,隱式繼承自System.Enum,不能手動修改。System.Enum自己是引用類型,繼承自System.ValueType。
  • 枚舉都是隱式密封的,不容許做爲基類派生子類。
  • 枚舉類型的枚舉成員均爲靜態,且默認爲Int32類型。
  • 每一個枚舉成員均具備相關聯的常數值。此值的類型就是枚舉的底層數據類型。每一個枚舉成員的常數值必須在該枚舉的底層數據類型的範圍以內。若是沒有明確指定底層數據類型則默認的數據類型是int類型。
  • 枚舉成員不能相同,但枚舉的值能夠相同。
  • 枚舉最後一個成員的逗號和大括號後面的分號能夠省略

  C#提供類一個類來方便操做枚舉,下面給出這個類的經常使用方法:

C#枚舉經常使用方法
方法 名稱
CompareTo 將此實例與指定對象進行比較並返回一個對兩者的相對值的指示
Equals 指示此實例是否等於指定的對象
Format 根據指定格式將指定枚舉類型的指定值轉換爲其等效的字符串表示形式
GetName 在指定枚舉中檢索具備指定值的常數的名稱
GetNames 檢索指定枚舉中常數名稱的數組
GetNames 檢索指定枚舉中常數名稱的數組
GetTypeCode 返回此實例的基礎 TypeCode
GetUnderlyingType 返回指定枚舉的基礎類型
GetValues 索指定枚舉中常數值的數組
HasFlag 肯定當前實例中是否設置了一個或多個位域
IsDefined 返回指定枚舉中是否存在具備指定值的常數的指示
Parse

將一個或多個枚舉常數的名稱或數字值的字符串表示轉換成等效的枚舉對象。 一個參數指定該操做是否不區分大小寫

TryParse

將一個或多個枚舉常數的名稱或數字值的字符串表示轉換成等效的枚舉對象。 用於指示轉換是否成功的返回值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

若是要顯示指定枚舉的底層數據類型很簡單,只需在聲明枚舉的時候加個冒號,後面緊跟要指定的數據類型(可指定類型有:byte、sbyte、short、ushort、int、uint、long、ulong)。

顯式設置枚舉的成員常量值,默認是從0開始,逐個遞增的。可是如下例子卻設置成了1,2,3,0。並且成員值能夠同樣的。

以下示例:由枚舉值獲取枚舉名稱與由枚舉名稱獲取枚舉值

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace enumApplication { class Program { static void Main(string[] args) { //輸出方式一:
            Console.WriteLine("我是四大名著之一的:" + Enum.GetName(typeof(Man), 1));  //西遊記(是哪一個名著由值獲取) //輸出方式二:
            string[] array1 = Enum.GetNames(typeof(Man)); Console.WriteLine("我是四大名著之一的:" + array1[2]);   //紅樓夢(是哪一個名著由值獲取) //輸出方式三:
            Array array2 = Enum.GetValues(typeof(Man)); Console.WriteLine("我是四大名著之一的:" + array2.GetValue(3));  //三國演義(是哪一個名著由值獲取) //輸出方式四:
            Type t = Enum.GetUnderlyingType(typeof(Man)); Console.WriteLine("我輸出的是值類型:"+t);       //輸出 Int32 //輸出方式五:由值獲取內容
            int i = 0; string Name = Enum.Parse(typeof(Man), i.ToString()).ToString();     //此時 Name="水滸傳"
            Console.WriteLine("我是四大名著之一的:" + Name); //輸出方式六:由值獲取內容
            string Name2 = "紅樓夢"; int j = Convert.ToInt32(Enum.Parse(typeof(Man), Name2));     //此時 j=2
            Console.WriteLine("我是《紅樓夢》對應的值序號:"+j); Console.ReadKey(); } enum Man:int //四大名著枚舉
 { 西遊記 = 1, 紅樓夢 = 2, 三國演義 = 3, 水滸傳 = 0 } } }

 

二、標誌枚舉

標誌枚舉要在頂部加[System.Flags]特性進行聲明。並且枚舉支持組合運算。

這種位運算是很是有用的,在sql語句裏也支持位運算。也就是說,把一個枚舉運算後的結果存入數據庫以後,還可以按照你的要求讀取出來。好比:

將一個"高帥"存如數據庫的值存入數據庫,那麼存入去的就是整型5。

select * from Table where Column & 1 = 1  //Column 是列名

select * from Table1 where  Column  | 1 = Column 

以下demo:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace enumApplication { class Program { static void Main(string[] args) { var man = People.高 | People.帥;  //賦值爲101 計算方法001或上100,結果是101
            Console.WriteLine("高和帥的枚舉值和爲:"+(int)man); if ((man & People.高) == People.高)       //101 man 
            {                                    //001 高 逐位相與,
                Console.WriteLine("此人:高");      //001 若是結果是高,就能夠反推出man包含 高
 } else { Console.WriteLine("此人:矮"); } Console.ReadKey(); } [System.Flags] public enum People:int { 高 = 1,  //001
            富 = 2,  //010
            帥 = 4,  //100
 } } }

 

三、枚舉使用的一些建議

  • 做爲參數、返回值、變量等類型可使枚舉,儘可能使用枚舉(要注意考慮分類的穩定性)
  • 大多數狀況下均可以使用int類型枚舉,下列狀況除外。
  • 枚舉可能被大量頻繁的使用,這時爲了節約空間可使用小於int類型的枚舉。
  • 標誌枚舉,且標誌多於32個。

 

枚舉用好了仍是蠻方便的,你們不妨去試試。

 

原文出處:https://www.cnblogs.com/xiongze520/p/10271350.html

相關文章
相關標籤/搜索