如何解决为什么将JValue保留在“动态”变量中,该变量可分配给字符串变量,但在调用带有字符串参数的方法时不可用?
这确实来自以下问题:Looping through JSON array and adding items to list C# 。
为了不完全摆脱该问题,我问一个我开始想知道的新问题。
使用Json.net,此代码为何起作用:
dynamic test = new JValue("test");
string s = test;
与此同时:
dynamic test = new JValue("test");
var list = new List<string>();
list.Add(test);
抛出:
RuntimeBinderException:“
System.Collections.Generic.List<string>.Add(string)
”的最佳重载方法匹配具有一些无效参数
考虑到Add
方法只有一个重载,它需要一个字符串,为什么还不默默地在此处进行运行时转换?
请注意,list.Add
并没有导致失败的具体信息,这也失败了:
dynamic test = new JValue("test");
Test(test);
...
public static void Test(string s) { }
我首先想到的是JValue
对string
有一个隐式强制转换运算符,可惜:
JValue test = new JValue("test");
string s = test;
无法编译,具有:
CS0266无法将类型'
Newtonsoft.Json.Linq.JValue
'隐式转换为'string
'。存在显式转换(您是否缺少演员表?)
但是它确实表示存在显式转换,这是对“ string
变量的直接分配”的“保存”吗?但是,然后,为什么它还没有将使用情况另存为参数值,而唯一的可用重载采用字符串参数呢?作业可能会有额外的规则吗?
对此进行了更多思考之后,我猜这个问题实际上是错误的问题。
dynamic
不应使运行时的工作量大于编译时的工作量,而只是推迟将类型绑定到运行时。
因此将变量的类型更改为静态类型的变量,两个示例都不起作用:
JValue test = new JValue("test");
string s = test; // CS0266 Cannot implicitly convert type 'Newtonsoft.Json.Linq.JValue' to 'string'. An explicit conversion exists (are you missing a cast?)
JValue test = new JValue("test");
Test(test); // same
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。