我在这里又遇到了问题,
我需要使用两本字典,其中一本嵌套,例如
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)
}
}
答案 0 :(得分:1)
此说明:
innerDict[move.id].Add(mode);
之所以起作用,是因为innerDict
是Dictionary<int, List<dynamic>>
,这意味着innerDict[move.id]
是List<dynamic>
,它通过单个参数实现Add
。
此说明:
dict[typeValue].Add(innerDict);
不起作用,因为dict
是Dictionary<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)