我可以自动初始化词典值吗?

时间:2012-12-12 05:44:20

标签: c# dictionary initialization

假设我想将我的数据存储为一堆命名列表。

我真的很喜欢Dictionary,你可以这样做:

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

但不幸的是,我无法安全地做到:

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

因为如果List上的SomeKey尚未初始化,我将获得空引用异常。

所以每当我改变字典中的值时,我都要这样做:

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

在我可以安全地添加到每个列表之前。它看起来很丑陋并且分散了非样板代码。我还在几个地方复制了代码(多次访问SomeKey,我想说的是“将此元素添加到SomeKey的列表中,无论它是否为空”。

我基本没有理由要在Dictionary中使用未初始化的值。如果它是List的数组,我会预先循环遍历每个元素并初始化每个成员;我不能用Dictionary执行此操作,因为我事先不知道密钥是什么。

是否有更简洁的语法用于说“访问此键的值,如果它为null,则初始化它”?

1 个答案:

答案 0 :(得分: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");