一、在學習枚舉之前,首先來聽聽枚舉的優點。
  1、枚舉能夠使代碼更加清晰,它允許使用描述性的名稱表示整數值。
2、枚舉使代碼更易于維護,有助于確保給變量指定合法的、期望的值。
3、枚舉使代碼更易輸入。
二、枚舉說明
1、簡單枚舉
●枚舉使用enum關鍵字來聲明,與類同級。枚舉本身可以有修飾符,但枚舉的成員始終是公共的,不能有訪問修飾符。枚舉本身的修飾符僅能使用public和internal。
●枚舉是值類型,隱式繼承自System.Enum,不能手動修改。System.Enum本身是引用類型,繼承自System.ValueType。
●枚舉都是隱式密封的,不允許作為基類派生子類。
●枚舉類型的枚舉成員均為靜態,且默認為Int32類型。
●每個枚舉成員均具有相關聯的常數值。此值的類型就是枚舉的底層數據類型。每個枚舉成員的常數值必須在該枚舉的底層數據類型的范圍之內。如果沒有明確指定底層數據類型則默認的數據類型是int類型。
●枚舉成員不能相同,但枚舉的值可以相同。
●枚舉最后一個成員的逗號和大括號后面的分號可以省略
C#提供類一個類來方便操作枚舉,下面給出這個類的常用方法:

要顯示指定枚舉的底層數據類型很簡單,只需在聲明枚舉的時候加個冒號,后面緊跟要指定的數據類型。
顯式設置枚舉的成員常量值,默認是從0開始,逐個遞增的。但是以下例子卻設置成了1,2,3,4,5,6,7,0。而且成員值可以一樣的。
示例,由枚舉值獲取枚舉名稱與由枚舉名稱獲取枚舉值
            string[] array1 = Enum.GetNames(typeof(Man));
            Console.WriteLine(array1[1]);   //關羽
            Array array2 = Enum.GetValues(typeof(Man));
            Console.WriteLine(array2.GetValue(1));  //還是關羽
            Type t = Enum.GetUnderlyingType(typeof(Man));
            Console.WriteLine(t);       //輸出 Int32
            //由值獲取內容
            int i = 1;
            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
    { 
        劉備 = 1,
        關羽 = 2,
        張飛 = 3
    }
2、標志枚舉
標志枚舉要在頂部加[System.Flags]特性進行聲明。而且枚舉支持組合運算。先來看個例子
    [System.Flags]
    public enum Week
    { 
        白 = 1,  //001
        富 = 2,  //010
        美 = 4,  //100
    }
這種位運算是非常有用的,在sql語句里也支持位運算。也就是說,把一個枚舉運算后的結果存入數據庫之后,還能夠按照你的要求讀取出來。比如:
將一個"白美"存如數據庫的值存入數據庫,那么存入去的就是整型5。
  那么我想讀出所有的"白"數據列表怎么讀呢?白,可以是純白"1",也是是白富3,可以是白美5,也可以是白富美7,你可以用in來讀,但是更好的方法是在sql語句中同樣使用位運算。
select * from Table1 where  Tag | 1 = Tag
三、枚舉的使用建議
當參數、返回值、變量等類型可以使枚舉,盡量使用枚舉(要注意考慮分類的穩定性)
大多數情況下都可以使用int類型枚舉,下列情況除外。
枚舉可能被大量頻繁的使用,這時為了節約空間可以使用小于int類型的枚舉。
標志枚舉,且標志多于32個。
下面寫一個:枚舉綁定MVC3下拉列表的示例:
  控制器代碼:
            for (int i = 0; i < keys.Length; i++)
            {
                Sexlist.Add(keys[i], (int)values.GetValue(i));
            }
            return View(Sexlist);
        }
    }
    public enum sex
    { 
        male = 1,
        female = 2,
        other = 3
    }
}
視圖代碼:
生成的HTML代碼:
再來一個例子,獲取枚舉描述
    public enum Sex
    {
        [Description("男")]
        man = 1,
        [Description("女")]
        woman = 2,
        [Description("其他")]
        other = 3
    }
新聞熱點
疑難解答