【发布时间】:2021-12-14 21:40:55
【问题描述】:
在 Windows Server 2019 上使用 VS 2019 中的调试。我正在将 Dictionary
所以,这里是函数的简短版本:
private void LoadStuff(ref Dictionary<string, dynamic> dictGen)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
dynamic o = serializer.Deserialize<dynamic>("{}");
o["matchField"] = "i";
o["newField"] = "language";
dictGen.Add("sub div", o);
o = null;
o = dictGen["sub div"];
// in Immediate Window, typing o["matchField"] Displays "i"
}
然后在调用函数中,调用LoadStuff:
Dictionary<string, dynamic> dictGen = new Dictionary<string, dynamic>();
void LoadStuff(ref dictGen);
dynamic o = dictGen["sub div"]
// In Immediate window or in use, typing o["matchField"] gives following error:
"error CS0021: Cannot apply indexing with [] to an expression of type 'object'"
我尝试使用 foreach 循环将 dictGen["sub div"] 显式转换为动态:
foreach(dynamic obj in dictGen.Values) // using obj["matchField"]
foreach(var key in dictGen.Keys) // obj = dictGen[key]
foreach (KeyValuePair<string, dynamic> ooo in dictGen) // dynamic obj = ooo.Value;
但无论我尝试哪种方式,都会出现同样的问题。那么,在函数中使用 Dictionary 与在返回时使用 Dictionary 有什么不同呢?如何获取 obj["matchField"] 的值?
【问题讨论】:
-
您使用的是什么类型的
serializer?serializer.Deserialize在运行时实际返回的是什么类型的对象? -
您提供的代码不是您正在运行的代码:main 方法中的
void会阻止编译。我已经尝试使用来自 Json.NET 和 YamlDotNet 的序列化程序来描述你所描述的内容,但我没有看到你描述的行为。请更新您的问题以提供一个最小的可重现示例。 -
我在原帖中添加了 JavaScriptSerializer。是的,这不是整个代码。显示的内容不在 main 方法中,它确实可以编译。
-
@Velocedge 当您无法显示错误时无法帮助您 - 需要minimal reproducible example 以便有人可以重现并理解错误以帮助您。显示编译/工作正常的代码并询问为什么某些 other 代码不起作用并不是真正的 SO 工作方式。
-
MRE 工作正常,所以发布它没有多大意义。
标签: c# dictionary object dynamic