首页新闻找找看学习计划

Convert.ToSTring(dynamic动态类型) 运行时报错

0
[已解决问题] 解决于 2018-09-05 18:36

异常信息:

The call is ambiguous between the following methods or properties: 'System.Convert.ToString(string)' and 'System.Convert.ToString(bool)'|栈  
at CallSite.Target(Closure , CallSite , Type , Object )

代码:



dynamic类型在运行时会确定类型,Convert.ToString()方法的时候应该会明确类型,为何会报不确定调用重载方法的异常?

请大佬提携~


7tiny的主页 7tiny | 初学一级 | 园豆:156
提问于:2018-08-22 17:58
< >
分享
最佳答案
0

dynamic类型是在运行时确定类型,所以Convert.ToString(dynamic)时编译是可以通过的,但是当程序跑起来的时候Convert.ToString()函数接受的是确定类型的参数,是不能传入dynamic类型的。

奖励园豆:5
T&&小白 | 小虾三级 |园豆:1434 | 2018-08-22 18:15

我跑单元测试的时候,Convert.ToString() 是没有错误的。这又是为什么呢?

期待后续解释^-^

7tiny | 园豆:156 (初学一级) | 2018-08-22 18:34

@7tiny: dynamic a=true;,这里根据值true,已经确定了a的类型是bool,也就是在使用Convert.ToString()的时候,参数类型已经确定了。

T&&小白 | 园豆:1434 (小虾三级) | 2018-08-23 08:54

@hellotim: 兄弟 实时类型测试已经通过了,而且断点看每次的值都是没问题的。

请求后续追踪~~~ ^-^

7tiny | 园豆:156 (初学一级) | 2018-08-23 09:54
其他回答(2)
0

你也说了dynamic是在运行时才确定类型的。

那你代码.tostring在编译的时候不知道类型呀,那自然得报错咯

czd890 | 园豆:7575 (大侠五级) | 2018-08-22 18:10

编译的时候是不会报错的,因为编译的时候 会默认为是object类型的重载,所以编译不会报错的。

支持(0) 反对(0) 7tiny | 园豆:156 (初学一级) | 2018-08-22 18:35

兄弟,ToString 没报错,Convert.ToString 报错了

支持(1) 反对(0) 7tiny | 园豆:156 (初学一级) | 2018-08-23 10:06
0

为什么前面已经用了 result.Result.ToString() ,后面又进行 Convert.ToString(result.Result) ?

dudu | 园豆:41034 (高人七级) | 2018-08-22 18:12

哈哈哈,这不清楚写代码人的意图,ToString()是不会报错的,因为dyniamic 运行时是确定类型的,任何类型的基类都是Object类型,ToString()走的是确定类型的基类的方法ToString(),所以这种方式是不会报错的。

支持(0) 反对(0) 7tiny | 园豆:156 (初学一级) | 2018-08-22 18:39

关键就是调用Convert.ToString()的时候报这个错就很尴尬啊,不太明白为啥运行时确定类型还会报这个错误。

支持(0) 反对(0) 7tiny | 园豆:156 (初学一级) | 2018-08-22 18:39

@7tiny: 既然前面已经 ToString() ,为什么不直接使用 ToString() 的结果

支持(0) 反对(0) dudu | 园豆:41034 (高人七级) | 2018-08-22 19:05

@7tiny: 报错时 result.Result 的类型是什么?

支持(0) 反对(0) dudu | 园豆:41034 (高人七级) | 2018-08-22 19:06

@dudu: 这个类型的值没有打出日志。

支持(0) 反对(0) 7tiny | 园豆:156 (初学一级) | 2018-08-23 09:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册