如何在嵌套字典中添加值列表和新键?

时间:2019-08-09 09:50:10

标签: c# dictionary

我在这里又遇到了问题,

我需要使用两本字典,其中一本嵌套,例如

Dictionary<int, Dictionary<int, List<dynamic>>> dict = new Dictionary<int, Dictionary<int, List<dynamic>>>();

我的问题如下,我需要先将键添加到作为数组的父字典中,所以我只需要执行一个foreach循环来检查该数组。此后,如果键不存在,我们只需将其添加到父词典中,然后在像这样的值上创建一个新词典:

foreach(var typeValue in Type)
{
    if(!dict.ContainsKey(typeValue))
    {
        dict.Add(typeValue, new Dictionary<int, List<dynamic>>();
    }
}

此后,我开始研究innerDictionary,我还需要检查它是否包含特定键,如果没有,请创建它并在其上创建一个新的List()作为值。

dynamic mode = AnotherFunction()

foreach(var typeValue in Type)
{
    if(!dict.ContainsKey(typeValue))
    {
        dict.Add(typeValue, new Dictionary<int, List<dynamic>>();

        Dictionary<int, List<dynamic>> innerDict = dict[typeValue];

        if(!innerDict.ContainsKey(mode.id))
        {
             innerDict.Add(mode.id, new List<dynamic>());

        }
    }
}

问题似乎从这里开始(根据调试模式/我将在最后链接的错误)

然后,我需要根据move.id将动态变量添加到innerDict的列表中,然后我需要将innerDict添加到父dict。所以我照做

// Seems to work well
innerDict[move.id].Add(mode)

// Here, there is an error
dict[typeValue].Add(innerDict)

我真的不明白为什么它不起作用,我的意思是,我添加了我们用foreach迭代的键,即具有正确类型的innerDictionary。 我收到以下错误

"No overload for method 'Add' takes 1 arguments"

组合代码:

dynamic mode = AnotherFunction()

foreach(var typeValue in Type)
{
    if(!dict.ContainsKey(typeValue))
    {
        dict.Add(typeValue, new Dictionary<int, List<dynamic>>();

        Dictionary<int, List<dynamic>> innerDict = dict[typeValue];

        if(!innerDict.ContainsKey(mode.id))
        {
             innerDict.Add(mode.id, new List<dynamic>());

        }
        // Seems to work well
        innerDict[move.id].Add(mode)

        // Here, there is an error
        dict[typeValue].Add(innerDict)
    }
}

1 个答案:

答案 0 :(得分:1)

此说明:

innerDict[move.id].Add(mode);

之所以起作用,是因为innerDictDictionary<int, List<dynamic>>,这意味着innerDict[move.id]List<dynamic>,它通过单个参数实现Add

此说明:

dict[typeValue].Add(innerDict);

不起作用,因为dictDictionary<int, Dictionary<int, List<dynamic>>>。 这意味着dict[typeValue]Dictionary<int, List<dynamic>>,它实现的Add方法需要两个参数:一个键和一个值。

要使其正常工作,您可以使用:

dict[typeValue] = innerDict;

这只是为了帮助您了解所收到的错误,但是您应该意识到根本不需要此指令,因为innerDict已经包含在dict中(您已添加了它。 dict.Add(typeValue, new Dictionary<int, List<dynamic>>();这一行,并用Dictionary<int, List<dynamic>> innerDict = dict[typeValue];将它分配给innerDict)