2

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

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

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

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

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

因为如果ListatSomeKey还没有被初始化,我会得到一个空引用异常。

因此,每次我更改字典中的值时,我都必须这样做:

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

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

基本上没有理由在我的Dictionary. 如果它是一个数组List,我会事先遍历每个元素并初始化每个成员;我不能这样做,Dictionary因为我事先不知道密钥是什么。

是否有更简洁的语法来表示“访问此键处的值,如果它为空,则对其进行初始化”?

4

1 回答 1

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");

于 2012-12-12T05:51:01.560 回答