Dictionary中擴充套件方法的一個應用
阿新 • • 發佈:2019-02-03
前段時間做了一個專案,碰到一個問題,從記錄的日誌來看,老是出現“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.
好多了,總算知道錯在哪裡了。