1. 程式人生 > >Dictionary中擴充套件方法的一個應用

Dictionary中擴充套件方法的一個應用

  前段時間做了一個專案,碰到一個問題,從記錄的日誌來看,老是出現“The given key was not present in the dictionary.”大意就是key不在對應的Dictionary中,然後程式就掛掉了。但是一氣之下寫了無數個try catch,有點心虛,不過好在看到《C#高階程式設計 第七版》上關於異常那章內容上說的,C#的try-catch 和C++的不一樣,基本上不會對效率產生什麼影響,心理總算好過了一點。

  但那個噁心的問題依舊在,因為始終不知道到底是哪個key出錯了,因為當時一直從索引的角度出發,一對"[ ]",貌似不能實現什麼。今天在看一段程式碼的時候發現了Dictionary的TryGetValue()這個方法,看了一下msdn上的說明,說他是ContainsKey()和"[ ]"的一個combine,msdn推薦如果程式碼中頻繁用到由key取value的操作,推薦使用TryGetValue這個方法,因為他是O(1)的時間複雜度(大概是這個意思)。呵呵。還不錯。然後忽然明白,其實一開始的key也就找到解決方案了。就是寫個擴充套件方法。

  貼下程式碼,寫的不好,還望大神完善。

首先是定義這個擴充套件方法(具體知識google或者百度,或者msdn);

public static class MyClass
    {
        public static string TryGetValueEx(this Dictionary<string, string> dic, string key)
        {
            
            if (dic == null)
                throw new Exception("Dictionary is NULL.");
            string value = string.Empty;
            if (!dic.TryGetValue(key, out value))
                throw new Exception("The given key:" + key + " was not present in the dictionary.");
            return value;
        }
    }
然後是呼叫。
static void Main(string[] args)
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("id", "1");
            try
            {
                string name = dic.TryGetValueEx("name");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();
        }
這樣就是輸出

The given key:name was not present in the dictionary.

好多了,總算知道錯在哪裡了。