C# 我可以自动初始化字典值吗?

C# 我可以自动初始化字典值吗?,c#,dictionary,initialization,C#,Dictionary,Initialization,假设我想将数据存储为一组命名列表 我非常喜欢使用字典,您可以做到: myDictionary["SomeKey"] = new List<string>{ "SomeString" }; 因为如果SomeKey上的列表尚未初始化,我将得到一个空引用异常 因此,每次我更改字典中的值时,我必须执行以下操作: if (!myDictionary.ContainsKey("SomeKey")) myDictionary["SomeKey"] = new List<string>

假设我想将数据存储为一组命名列表

我非常喜欢使用
字典
,您可以做到:

myDictionary["SomeKey"] = new List<string>{ "SomeString" };
因为如果
SomeKey
上的
列表
尚未初始化,我将得到一个空引用异常

因此,每次我更改字典中的值时,我必须执行以下操作:

if (!myDictionary.ContainsKey("SomeKey")) myDictionary["SomeKey"] = new List<string>();
if(!myDictionary.ContainsKey(“SomeKey”))myDictionary[“SomeKey”]=new List();
在我可以安全地添加到每个列表之前。它看起来很难看,并且会分散对非样板代码的注意力。我还在多个地方复制了代码(访问
SomeKey
多次,而我只想说“将此元素添加到
SomeKey
的列表中,不管它是否为空”)

我基本上没有理由希望在我的
字典中使用未初始化的值。如果它是一个
列表的数组
,我会事先遍历每个元素并初始化每个成员;我不能用
字典
来做这件事,因为我不知道事先会有哪些键


有没有更简洁的语法来表示“访问此键处的值,如果值为null,则初始化它”

我认为没有,但如果需要,可以将其作为扩展方法。差不多

public static class DictionaryExtensions
{
    public static SafeAdd(this Dictionary<string,List<string>> obj, string key, string val)
    {
        // your example code
    }
}
公共静态类字典扩展
{
公共静态安全添加(此字典对象、字符串键、字符串值)
{
//您的示例代码
}
}

然后你可以做
myDictionary.SafeAdd(“somekey”,“somestring”)

是否可以扩展
此[键]
索引器以检查请求的值是否为空?当我尝试子类化时,索引器看起来不像是虚拟的,但您可以始终创建自己的IDictionary实现,以您想要的方式执行,只需键入更多的内容即可。
public static class DictionaryExtensions
{
    public static SafeAdd(this Dictionary<string,List<string>> obj, string key, string val)
    {
        // your example code
    }
}