1. 程式人生 > 其它 >C#(102):列舉型別與位域列舉Enum

C#(102):列舉型別與位域列舉Enum

一、概述

定義一個值型別,其中包含固定值集合。列舉型別變數可以是此集合中的任意一個或多個值。

列舉使用enum關鍵字來宣告,與類同級。

列舉本身可以有修飾符,但列舉的成員始終是公共的,不能有訪問修飾符。列舉本身的修飾符僅能使用public和internal。

二、常數列舉

1、定義列舉型別

顯式指定列舉的底層資料型別,如果沒有明確指定底層資料型別則預設的資料型別是int型別。

    enum sex : byte  //顯示指定列舉的底層資料型別
    {
        male,
        female,  //此逗號可以省略
    };        //此分號可以省略

顯式設定列舉的成員常量值,預設是從0開始,逐個遞增的。但是以下例子卻設定成了1,2,3,40,1。而且成員值可以一樣的。

    void Main()
    {
        Console.WriteLine((int)Week.Monday);  //獲取值
    }
    
    enum Week
    {
        Monday = 1,
        Tuesday = 2,
        Wednesday = 3,
        Sunday = 0,
        Everyday = 1  //成員的值可以設定成一樣的,但是成員不行
    }

2、宣告列舉變數並初始化

    Color myColor=Color.White;
    Color myColor=(Color)1;//由值轉成列舉成員
    Color myColor=(Color)Enum.Parse(typeof(Color), "White"); //將字串解析成列舉成員

3、列舉變數的使用

    Color myColor = Color.White;
    string Name = myColor.ToString();
    int intName = (int)myColor;//或Convert.ToInt32(myColor)
    
    
    string Name1 = Enum.GetName(typeof(Color), 1); //由值獲取名

4、迴圈列舉

    Dictionary<string, int> Colorlist = new Dictionary<string, int>();
    string[] keys = Enum.GetNames(typeof(Color));
    Array values = Enum.GetValues(typeof(Color));
    
    for (int i = 0; i < keys.Length; i++)
    {
        Colorlist.Add(keys[i], (int)values.GetValue(i));
    }

應用:

    //填充comboBox
    comboBox1.DataSource = Enum.GetValues(typeof(Color));
    Color value = (Color)comboBox1.SelectedValue;
    
    //Grid的列資料
    DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
    col.Name = "My Enum Column";
    col.DataSource = Enum.GetValues(typeof(Color));
    col.ValueType = typeof(Color);
    dataGridView1.Columns.Add(col);

三、位域列舉

位域通常用於由可組合出現的元素組成的列表,位域設計為通過按位“或”運算組合來生成未命名的值,而列舉常數則不是。
位域通常用 2 的冪(即 1、2、4、8 、16等2的幾次方)定義列舉常量。這意味著組合的列舉常量中的各個標誌都不重疊。

1、定義列舉型別

    [Flags] //Flags屬性表示此列舉為位域列舉
    enum Color
    {
        None = 0,
        Red = 1,
        White = 2,
        Blue = 4,
        Black = 8
    }

2、宣告列舉變數並初始化

    Color myColor=Color.Red | Color.White|Color.Blue;//”|”表示相併
    Color myColor = (Color)3;//由值轉成列舉成員,Red, White
    Color myColor = (Color)Enum.Parse(typeof(Color), "White,Blue"); //將字串解析成列舉成員,White, Blue

3、列舉變數的使用

    Color myColor = Color.Red | Color.White | Color.Blue;
    string Name = myColor.ToString();//Red,White,Blue
    int intName = (int)myColor;//或Convert.ToInt32(myColor),7
    
    string Name2 = Enum.GetName(typeof(Color), 2);//由值獲取名,White

4、位域列舉特殊操作

1、判斷列舉變數 是否包含 在某個或某些列舉項:

    if(myColor & Color.Red)==Color.Red){}//”&”表示相交,判斷是否包含Color.Red
    if(myColor & Color.Red)!=0){}

2、從列舉變數中 去除 某個或某些列舉項:

    myColor=myColor&(~(Color.Red | Color.White ))//”~”表示取反,出去Color.Red | Color.White兩項。

或者

    myColor=myColor^(Color.Red | Color.White )//”^”表示異或,不同為真,相同為假。

3、判斷美劇變數 是否等於 某個或某些列舉項:

    if((myColor | Color.Write)==Color.Write)//判斷是否只有白色。