C# 列舉 Enum 與 switch 應用

使用enum的優點在於不需要額外的打字

能增加程式的可讀性,也不怕會打錯字

而列舉 Enum 與 switch 也很常被一起使用

像是當使用者輸入運算符號時,去做運算判斷時

可先新增一個類別,並將class改成Enum

namespace TestDemo
{
    enum Operation
    {
        plus, minus, multiply, divided
    }
}

並將enum加入到方法裡面,去判斷要執行的運算符號

public void Test(Operation operator)
{
    switch (operator)
    {
       case Operation.plus:
         textBox1.Text = (value + value2).ToString();
         break;
       case Operation.minus:
         textBox1.Text = (value - value2).ToString();
         break;
       case Operation.multiply:
         textBox1.Text = (value * value2).ToString();
         break;
       case Operation.divided:
         textBox1.Text = (value / value2).ToString();
         break;
       default:
         break;
    }
}

 

而在有時候,當針對多個Button綁定同一個事件,再根據Button內容的不同來去執行功能時

也可以搭配使用 Enum 與 switch

// 讀取按鈕文字來執行功能:
// 如果不是讀取到功能按鈕,則按鈕上文字呈現在Content上
Button btn = (Button)sender;

            switch (btn.Text)
            {
                case 功能.換行.toString():
                    Content.Text += "\r\n";
                    break;
                case 功能.全部複製.toString():
                    Content.SelectAll();
                    Content.Copy();
                    break;
                case 功能.貼上.toString():
                    Content.Paste();
                    break;
                case 功能.清空.toString():
                    Content.Text = "";
                    break;
                default:
                    Content.Text += btn.Text;
                    break;
            }

但是這時候會發生編譯器錯誤,原因在於 Switch內的值以及 Case中的內容並不一致,儘管已使用了.toString()

因此這時候就可以使用nameof 關鍵字

將程式修改成

Button btn = (Button)sender;

            switch (btn.Text)
            {
                case nameof(功能.換行): //取得enum 選項中的名字-換行
                    Content.Text += "\r\n";
                    break;
                case nameof(功能.全部複製):
                    Content.SelectAll();
                    Content.Copy();
                    break;
                case nameof(功能.貼上):
                    Content.Paste();
                    break;
                case nameof(功能.清空):
                    Content.Text = "";
                    break;
                default:
                    Content.Text += btn.Text;
                    break;
            }

 

 

新人發文,文章敘述如有錯誤及觀念不正確,請不吝嗇指教,感謝~