我是C#初学者(但对JavaScript非常熟悉),并且我正在通过调试示例代码来学习。我现在对"立即窗口"有一个问题。
我在
上设置了一个断点 (... nested object sent via JSON from some external javascript code ...)
var json_serializer = new JavaScriptSerializer();
var value_list = (IDictionary<string, object>)json_serializer.DeserializeObject(value);
然后在即时窗口中评估了以下内容
value_list
Count = 4
[0]: {[type, msg]}
[1]: {[settings, System.Collections.Generic.Dictionary`2[System.String,System.Object]]}
[2]: {[hello, edge]}
[3]: {[txt, notepad.exe]}
value_list["txt"]
"notepad.exe"
value_list["settings"]
Count = 2
[0]: {[host, test.com]}
[1]: {[port, 80]}
到目前为止很好。
然后我尝试了
value_list["settings"]["host"]
,但只有"错误cs0021:无法将索引[]应用于类型'对象'的表达
如何在即时窗口中打印主机的值?
c#是一种强烈打字的语言。
你有
var value_list = (IDictionary<string, object>)json_serializer.DeserializeObject(value);
var
表示该变量的类型已在编译过程中由编译器确定。由于右侧的铸件,编译器确定了这一点:
IDictionary<string, object> value_list = (IDictionary<string, object>)json_serializer.DeserializeObject(value);
因此,value_list
是IDictionary<string, object>
类型。因此,value_list["settings"]
为object
类型。
要查看即时窗口中的值,将中间结果(即object
类型)铸成适当的类型。
((IDictionary<string, object>)value_list["settings"])["host"]