【发布时间】:2019-08-09 09:50:10
【问题描述】:
我又遇到问题了,
我需要使用 2 个字典,其中一个嵌套如下
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)
}
}
【问题讨论】:
-
和这个有关系吗? stackoverflow.com/questions/44006718/…dynamic 告诉编译器类型可以在运行时改变
-
问题是如果 List
为 null 你需要 new List ()。 -
@BarışAkkurt 好吧,告诉你更多,有一个 JsonConvert 可以在 9 个不同的类之间反序列化,我“知道”它需要反序列化的类,这要归功于我在 Json 中的一个参数收到。但是我没有做 9 个案例(可以增加),而是使用动态类型(我知道这在我的案例中并不合理,而且可能很难看)但我只需要访问 json 中的“数据”字段,它们都是有那个“数据”字段,只是里面没有相同的东西,但我可以通过键入 myDynamicObject.data 来获取所有内容,例如,无论类是什么
-
@jdweng 如果键 mode.id 不存在,我已经有一个新的 List
,并且由于我在没有对其初始化任何值的情况下创建它,所以它会在添加任何值之前完成它跨度> -
您不需要添加。只需设置 dict 的值: dict[typeValue] = innerDict;
标签: c# dictionary