C#(102):列舉型別與位域列舉Enum
阿新 • • 發佈:2022-05-15
一、概述
定義一個值型別,其中包含固定值集合。列舉型別變數可以是此集合中的任意一個或多個值。
列舉使用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)//判斷是否只有白色。