Home [C# 筆記] enum 列舉
Post
Cancel

[C# 筆記] enum 列舉

列舉 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;
    }
}

builtin-types/enum

This post is licensed under CC BY 4.0 by the author.