C# 如何取得Enum的Name?-列舉(Enum)與switch應用

  • 2155
  • 0
  • C#
  • 2020-07-27

我們很常會使用 enum (列舉)來將我們的狀態做一個紀錄

使用enum的優點在於我們不需要額外的打字,也不用擔心自己打錯字

因此就可以利用enum來去針對狀態去做一個紀錄、判斷。

而今天要介紹的是關於enum以及switch..case 搭配的方法。

在我們撰寫程式的時候,有時候針對多個Button功能會綁定同一個事件,再根據Button內容的不同來去執行功能。

這時候我們可能會搭配Enum這樣寫:

// 讀取按鈕上的文字來執行功能:
// 如果不是讀取到功能按鈕,則將按鈕上的文字呈現在 文字方塊(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()

這時候我們可以使用 C# 6.0的功能- nameof

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

 

以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教:)

有任何家教、案子 或技術相關問題 請都歡迎聯繫我

http://www.zhenghui.idv.tw/