我是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:无法将[]的索引应用于类型为'object'的表达式”。
如何在立即窗口中显示主机的值?
答案 0 :(得分:1)
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"]