[C#] 將Enum當作key查找特定的值 (Enum as Dictionary keys)

  • 3068
  • 0
  • C#
  • 2020-07-12

此篇文章將呈現該如何使用dictionary進行查找的動作

將Enum內的值當作key,並針對每一個key賦予一個value

只要使用已存在的鑰匙(key)就能開啟寶箱,獲得相對應的內容物(value)

開發環境

  • Visual Studio 2013

 

背景:
假設今天身為一位求職者,應徵某家公司,
該公司有一些表單需要填寫,且之後需進行兩次面試,
則該求職者的狀態可能有以下情形,
NotFill , Writing , Finish , _1stFail , _2ndFail , FinalCheckFail, _1stPass , _2ndPass , FinalCheckPass
但我們不想要顯示在介面上的時候該求職者的狀態有顯示底線的情形(ex: _1stFail),
並且希望單字之間有些許空格,或者顯示一些不同的值
於是選擇使用 Dictionary 來解決此一問題

作法:
首先開啟Visual Studio 2013
接著選擇視窗上方的 File → New → Project → 新建一個C# 的 Console Application (主控台應用程式) 
此範例中命名該專案名稱為 「 DictionaryProj

另外在該專案內新增 UserStatus.csStatusDictionary.cs 兩個class
以下為完整程式碼

 

Program.cs

using System;
using System.Collections.Generic;

namespace DictionaryProj
{
    class Program
    {
        private static Dictionary<string, string> MyDic;
        static void Main(string[] args)
        {
            StatusDictionary statusDic = new StatusDictionary();
            Console.WriteLine("============ ShowAllInDictionary ============");
            statusDic.ShowAllInDictionary();
            Console.WriteLine();
            Console.WriteLine("============ FindInDictionary ============");
            statusDic.FindInDictionary(UserStatus.Finish.ToString());  // this key is existed
            statusDic.FindInDictionary("NotFill");  // this key is existed
            statusDic.FindInDictionary("一面通過");  // this key is not existed
            statusDic.FindInDictionary("ABCD");     // this key is not existed

            Console.Read();
        }

    }
}

 

UserStatus.cs

namespace DictionaryProj
{
    public enum UserStatus
    {
        NotFill,
        Writing,
        Finish,
        _1stFail,
        _2ndFail,
        FinalCheckFail,
        _1stPass,
        _2ndPass,
        FinalCheckPass
    }
}

 

StatusDictionary.cs

using System;
using System.Collections.Generic;
using System.Linq;

namespace DictionaryProj
{
    public class StatusDictionary
    {
        Dictionary<string, string> myDic;

        public StatusDictionary()
        {
            myDic = GetUserStatusDictionary();
        }

        private Dictionary<string, string> GetUserStatusDictionary()
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            List<string> statusCastArray = new List<string>()
            {
                "未填寫",
                "填寫中",
                "填寫完畢",
                "一面失敗",
                "二面失敗",
                "Final check 失敗",
                "一面通過",
                "二面通過",
                "Final check 通過"
            };
            var statusKeyArray = Enum.GetValues(typeof(UserStatus)).Cast<UserStatus>().ToArray(); // 從 enum 取得資料當作 key
            for (int i = 0; i < statusKeyArray.Length; i++) // 針對每一個key賦予一個value
            {
                string key = statusKeyArray[i].ToString();
                string value = statusCastArray[i];

                dic.Add(key, value);
            }
            return dic;
        }
        
        // add a new data 
        public void AddData(string key, string value)
        {
            myDic.Add(key, value);
        }

        // 查字典 // find specific value
        public void FindInDictionary(string key)
        {
            string value;
            if (myDic.ContainsKey(key))
            {
                value = myDic[key];
            }
            else
            {
                value = "Not Found";
            }
            Console.WriteLine("Key = {0} , Value = {1}", key, value);
        }

        // 巡整個字典
        public void ShowAllInDictionary()
        {
            foreach (var oneItem in myDic)
            {
                Console.WriteLine("Key = " + oneItem.Key + ", Value = " + oneItem.Value);
            }
        }
    }
}

 

執行結果:

參考資料:
http://code2study.blogspot.tw/2012/01/c-dictionary.html
http://stackoverflow.com/questions/1167361/how-do-i-convert-an-enum-to-a-list-in-c
https://stackoverflow.com/questions/5583717/enum-to-dictionary-in-c-sharp

如果這篇文章有幫助到你,想支持一下作者可以幫忙點擊側欄的「 Goolgle AdSense 」廣告 😄

如果你喜歡這篇文章可以點擊「分享」按鈕,來分享到你的網路社群
(以上文章內容如有謬誤,敬請不吝指教)