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
}
}