列舉 enum
規範我們的開發
語法:
1
2
3
4
5
[public] enum 列舉名 {
值1,
值2,
值3
}
public:公開的公用的,哪都可以訪問
enum:宣告列舉的關鍵字
列舉名:要符合Pascal命名規範。(每個單字字首大寫)
為什麼會有列舉這個東西?
假如在多人開發中,在共有的資訊中,會有多人要儲存相同的資訊,它可以統一規範儲存的這個值。
像是性別Gender,有人儲存中文:男/女,有人儲存英文:male/female,有的用縮寫:M/F;有的用0/1,這樣就就會很雜亂…
也就是說,程式碼會有常用的值,不會讓每個人自己去定義,而是統一一個規範,讓大家去用。
enum 用法
宣告在class外面,整個class都可以使用
1
2
3
4
5
6
7
8
9
10
11
//宣告 enum 列舉
public enum Season
{
春,
夏,
秋,
冬
}
//使用enum
Season state = Season.春;
enum 和 int, string 類型之間的轉換
enum列舉類型默認可以跟 int 類型互相轉換,列舉類型跟int類型是兼容的。
將 列舉強制轉成 int類型
1
2
3
4
5
6
7
public enum Season
{
Spring,
Summer,
Autumn,
Winter
}
強制轉成 int 類型,它會依序從0開始: 0,1,2,3
1
2
3
4
Console.WriteLine((int)Season.Spring); //ouput:0
Console.WriteLine((int)Season.Summer);//ouput:1
Console.WriteLine((int)Season.Autumn);//ouput:2
Console.WriteLine((int)Season.Winter);//ouput:3
如果在 指定Spring為1,那麼會輸出什麼?
1
2
3
4
5
6
7
public enum Season
{
Spring = 1,
Summer,
Autumn,
Winter
}
結果會是從1開始,依序 1,2,3,4
如果是這樣呢:
1
2
3
4
5
6
7
public enum Season
{
Spring = 2,
Summer,
Autumn = 6,
Winter
}
結果會是 2,3,6,7 它會有一個依序的規律…
將int類型強制轉成enum列舉類型
將數字1強制轉成 enum 列舉類型
1
2
int n = 1;
var s = (Season)n; //Summer
輸出:Summer
轉換一個enum列舉中沒有的值
如果數字改成8,不存在enum列舉裡呢?
1
2
int n = 8;
var s = (Season)n; //8
輸出:8 enum列舉裡沒有8,轉換不了,就會輸出原本輸入的數字。
當轉換一個enum列舉中沒有的值的時候:
如果轉換的是數字,不會拋異常,而是直接將數字顯示出來。
如果轉換的是字串,會拋異常。
將字串轉成enum類型
可以用Enum.Parse轉成enum類型
1
2
3
string s = "0";
Season r = (Season)Enum.Parse(typeof(Season), s);
Console.WriteLine(r);
列舉練習:
提示用戶選擇一個在線狀態,我們接收,並將用戶的輸入轉換成列舉類型,再次輸出控制台上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//定義在線狀態的enum列舉
enum QQState
{
OnLine = 1,
OffLine,
Leave,
Buse,
QMe
}
//提示用戶選擇一個在線狀態,我們接收,並將用戶的輸入轉換成列舉類型,再次輸出控制台上
while (true)
{
Console.WriteLine("***請選擇你的在線狀態:1--OnLine 2--OffLine 3--Leave 4--Busy 5--QMe***"); //提示用戶輸入
string input = Console.ReadLine()!; //接收用戶輸入
//依用戶輸入的值做處理
switch (input)
{
case "1":
QQState s1 = (QQState)Enum.Parse(typeof(QQState), input); //將用戶的輸入轉換成列舉類型
Console.WriteLine($"您選擇的在線狀態是:{s1}"); //再次輸出控制台上
//Todo something...
break;
case "2":
QQState s2 = (QQState)Enum.Parse(typeof(QQState), input);
Console.WriteLine($"您選擇的在線狀態是:{s2}");
//Todo something...
break;
case "3":
QQState s3 = (QQState)Enum.Parse(typeof(QQState), input);
Console.WriteLine($"您選擇的在線狀態是:{s3}");
//Todo something...
break;
case "4":
QQState s4 = (QQState)Enum.Parse(typeof(QQState), input);
Console.WriteLine($"您選擇的在線狀態是:{s4}");
//Todo something...
break;
case "5":
QQState s5 = (QQState)Enum.Parse(typeof(QQState), input);
Console.WriteLine($"您選擇的在線狀態是:{s5}");
//Todo something...
break;
}
}