列舉 enum

    列舉enum是一種有效率的方式給一組變數各別的整數,並且可以不必一一指定。

    舉一個最簡單的例子,如果我要設定周日到周六這七天,周日為0,周一為1這樣以此類推,如果不用列舉,我可能要設一個struct,然後一筆一筆的設定,這樣的方式很不方便,若是我使用列舉,情況就不一樣了。

 

使用列舉我只需要像下面這樣子宣告:

enum Week { Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}

 

這樣子我就宣告好了,我們可以測試一下。

 Console.WriteLine(Week.Sunday + "," + (int)Week.Sunday);

 Console.WriteLine(Week.Monday + "," + (int)Week.Monday);

 Console.WriteLine(Week.Tuesday + "," + (int)Week.Tuesday);

 

輸出結果會是下面這樣:

 Sunday,0

 Monday,1

Tuesday,2

 

    有一個地方要注意一下,可以看到在這裡如果是Week.Sunday會印出文字,而 (int)Week.Sunday會印出數值,enum會給每個變數一個數值,Week.Sunday會是變數名稱,而當你想要得到這個變數名稱的數值就要用(int)來做轉型。

 

    從輸出結果就可以看到,完全就不需要指定數值,從周日到周六就照順序0~6設定好了。如果要指定數值,可以只有指定第一個,後面的就會自動一個個照順序加1,如下面的例子

enum Animals { Monkey=1,Elephant,Mouse }

static void Main(string[] args)

{

Console.WriteLine(Animals.Monkey + "," + (int)Animals.Monkey);

Console.WriteLine(Animals.Elephant + "," + (int)Animals.Elephant);

Console.WriteLine(Animals.Mouse + "," + (int)Animals.Mouse);

}

 

輸出結果會是下面這樣:

Monkey,1

Elephant,2

Mouse,3

 

當然,也可以每一個都自己設定數值,舉例如下:

enum Person { Mary=1,Joe=5,Danny=2 }

static void Main(string[] args)

{

Console.WriteLine(Animals.Monkey + "," + (int)Animals.Monkey);

Console.WriteLine(Animals.Elephant + "," + (int)Animals.Elephant);

Console.WriteLine(Animals.Mouse + "," + (int)Animals.Mouse);

}

輸出結果會是下面這樣:

Mary,1

Joe,5

Danny,2

 

可以看到每一個項目數值都是照程式設定的。

 

Enum裡面的數值是可以相加的,例如Person.Mary + Person.Joe,我們可以來試一下結果如何。

 

Console.WriteLine(Person.Mary + "+" + Person.Joe + (int)Person.Mary + (int)Person.Joe);

 

輸出結果:

Mary+Joe,15

 

這跟我們原本想要的不一樣,本來以為1+5=6,結果出來變成15,這是因為這樣子寫的話是(int)Person.Mary(int)Person.Joe的兩個數字以字串做相加,而不是數字相加,就變成15而不是6

 

如果要得到正確的結果,寫法如下:

 

Console.WriteLine(Person.Mary + "+" + Person.Joe + ((int)Person.Mary + (int)Person.Joe));

 

輸出結果:

Mary+Joe,6

 

()包起來,出來的結果就會是兩個數字相加,得到6

 

本範例的完整程式碼如下:

class Program

{

        enum Week { Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}

        enum Animals { Monkey=1,Elephant,Mouse }

        enum Person { Mary=1,Joe=5,Danny=2 }

 

        static void Main(string[] args)

        {

         

            Console.WriteLine(Week.Sunday + ","+(int)Week.Sunday);

            Console.WriteLine(Week.Monday + "," + (int)Week.Monday);

            Console.WriteLine(Week.Tuesday + "," + (int)Week.Tuesday);

            Console.WriteLine("------------------------------------------");

            Console.WriteLine(Animals.Monkey+","+(int)Animals.Monkey);

            Console.WriteLine(Animals.Elephant + "," + (int)Animals.Elephant);

            Console.WriteLine(Animals.Mouse + "," + (int)Animals.Mouse);

            Console.WriteLine("------------------------------------------");

            Console.WriteLine(Person.Mary + "," + (int)Person.Mary);

            Console.WriteLine(Person.Joe + "," + (int)Person.Joe);

            Console.WriteLine(Person.Danny + "," + (int)Person.Danny);

            Console.WriteLine(Person.Mary + "+" + Person.Joe + "錯誤寫法," + (int)Person.Mary + (int)Person.Joe);

            Console.WriteLine(Person.Mary + "+" + Person.Joe + "正確寫法," + ((int)Person.Mary + (int)Person.Joe));

 

            Console.ReadLine();

}

 

 

輸出結果

Sunday,0

Monday,1

Tuesday,2

------------------------------------------

Monkey,1

Elephant,2

Mouse,3

------------------------------------------

Mary,1

Joe,5

Danny,2

Mary+Joe錯誤寫法,15

Mary+Joe正確寫法,6

 


 

arrow
arrow
    文章標籤
    列舉 C# enum
    全站熱搜
    創作者介紹
    創作者 波羅、希夏普2020 的頭像
    波羅、希夏普2020

    希夏普2020的程式天地

    波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()