异常信息:
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()方法的时候应该会明确类型,为何会报不确定调用重载方法的异常?
请大佬提携~
dynamic
类型是在运行时确定类型,所以Convert.ToString(dynamic)
时编译是可以通过的,但是当程序跑起来的时候Convert.ToString()
函数接受的是确定类型的参数,是不能传入dynamic类型的。
我跑单元测试的时候,Convert.ToString() 是没有错误的。这又是为什么呢?
期待后续解释^-^
@7tiny: dynamic a=true;
,这里根据值true
,已经确定了a
的类型是bool
,也就是在使用Convert.ToString()
的时候,参数类型已经确定了。
@hellotim: 兄弟 实时类型测试已经通过了,而且断点看每次的值都是没问题的。
请求后续追踪~~~ ^-^
你也说了dynamic是在运行时才确定类型的。
那你代码.tostring在编译的时候不知道类型呀,那自然得报错咯
编译的时候是不会报错的,因为编译的时候 会默认为是object类型的重载,所以编译不会报错的。
兄弟,ToString 没报错,Convert.ToString 报错了
为什么前面已经用了 result.Result.ToString()
,后面又进行 Convert.ToString(result.Result)
?
哈哈哈,这不清楚写代码人的意图,ToString()是不会报错的,因为dyniamic 运行时是确定类型的,任何类型的基类都是Object类型,ToString()走的是确定类型的基类的方法ToString(),所以这种方式是不会报错的。
关键就是调用Convert.ToString()的时候报这个错就很尴尬啊,不太明白为啥运行时确定类型还会报这个错误。
@7tiny: 既然前面已经 ToString()
,为什么不直接使用 ToString()
的结果
@7tiny: 报错时 result.Result
的类型是什么?
@dudu: 这个类型的值没有打出日志。
7tiny Convert.ToSTring(dynamic动态类型) 运行时报错 这个怎么复现的,你代码里面的result.Result 是怎么返回的?