2012-12-12 48 views
2

假設我想將我的數據存儲爲一堆命名列表。我可以自動初始化字典值嗎?

我真的很喜歡如何與Dictionary,你可以這樣做:

myDictionary["SomeKey"] = new List<string>{ "SomeString" }; 

但不幸的是,我不能做安全:

myDictionary["SomeKey"].Add("SomeString"); 

因爲如果ListSomeKey尚未初始化,我會得到一個空引用異常。

所以每次我改變在字典中的價值,我必須做的:

if (!myDictionary.ContainsKey("SomeKey")) myDictionary["SomeKey"] = new List<string>(); 

之前,我可以放心地添加到每個列表。它看起來很醜並且分散了非模板代碼。我也在幾個地方複製代碼(當我想說的時候,多次訪問SomeKey是「將此元素添加到列表SomeKey,無論它是否爲空」)。

基本上沒有理由爲什麼我想在我的Dictionary中未初始化的值。如果它是一個List的數組,我會預先遍歷每個元素並初始化每個成員;我不能用Dictionary這樣做,因爲我不知道密鑰會提前。

是否有一個更簡潔的語法來說:「在這個鍵上訪問這個鍵的值,如果它是空的,然後初始化它」?

回答

3

我不認爲有,但你可以做它作爲擴展方法,如果你想。像

public static class DictionaryExtensions 
{ 
    public static SafeAdd(this Dictionary<string,List<string>> obj, string key, string val) 
    { 
     // your example code 
    } 
} 

的東西,那麼你可以做myDictionary.SafeAdd("somekey","somestring");

+0

是否有可能延長'這個[關鍵]'索引檢查請求的值爲null? – Superbest

+0

當我嘗試創建子類時,索引器看起來並不是虛擬的,但是您可以始終創建您自己的IDictionary >的實現,並按照您的需要進行更多操作。 – Paul

相關問題