我有这个功能
string F(dynamic a)
{
return "Hello World!";
}
后来当我说时
dynamic a = 5;
var result = F(a);
结果必须在编译时是字符串类型,但是没有发生,为什么? 事实上,合规传递了这个
int result2 = F(a);
而不是这个
int result3 = F(5);
请帮忙吗?
答案 0 :(得分:6)
在here中解释:
如果方法调用中的一个或多个参数具有动态类型,或者方法调用的接收者是动态类型,则在运行时而不是在编译时发生重载解析。
现在在F(a)
的情况下,因为a是动态的,编译器不会在编译时检查重载。但是当你说:
F(2);
2
是一个整数,而不是dynamic
。这就是为什么重载解析在编译时发生并且你得到错误。如果你将整数文字转换为动态,你将不会在编译时得到任何错误(但你在运行时做):
int x = F((dynamic)2);