假设我想将我的数据存储为一堆命名列表。
我真的很喜欢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,则初始化它”?
答案 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");