在C#中创建三级嵌套字典

Ank*_*itG 5 c# dictionary

我想创建一个以下类型的字典,

var data = new Dictionary<string, Dictionary<string, Dictionary<string, int>>>();
Run Code Online (Sandbox Code Playgroud)

当我尝试以下列方式向字典添加值时,我得到一个KeyNotFound异常.

data[key1][key2][key3]= 3;
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?我假设如果在字典中找不到密钥,它会自动添加到字典中.

否则有没有办法在运行时添加键?

我期待以下类型的输出:

 [male,[animal,[legs,4]

               [eyes,2]]
       [human,[hands,2]
               [ears,2]]

[female,[animal,[nose,1]

                 [eyes,2]]
         [bird,[wings,2]
                 [legs,2]]
Run Code Online (Sandbox Code Playgroud)

dri*_*iis 6

这里的问题是你只是试图分配到最里面的字典.但两个外层并不存在.

您需要明确每个级别:

if (!data.ContainsKey(key1))
    data[key1]  = new Dictionary<string, Dictionary<string, int>();
Run Code Online (Sandbox Code Playgroud)

... 等等.编写它可能有点麻烦,所以如果你需要它很多,我建议你在字典上创建一个扩展方法,让你轻松地做到这一点.

如果分配给字典中的键,则会创建该条目.但是,如果您从字典中的某个键读取,并且该键不存在,则会出现异常.