动态参数的问题

时间:2014-11-06 13:51:27

标签: c# .net dynamic

我有这个功能

string F(dynamic a)
{
    return "Hello World!";
}
后来当我说

dynamic a = 5;
var result = F(a);

结果必须在编译时是字符串类型,但是没有发生,为什么? 事实上,合规传递了这个

int result2 = F(a);

而不是这个

int result3 = F(5);

请帮忙吗?

1 个答案:

答案 0 :(得分:6)

here中解释:

  

如果方法调用中的一个或多个参数具有动态类型,或者方法调用的接收者是动态类型,则在运行时而不是在编译时发生重载解析。

现在在F(a)的情况下,因为a是动态的,编译器不会在编译时检查重载。但是当你说:

F(2);

2是一个整数,而不是dynamic。这就是为什么重载解析在编译时发生并且你得到错误。如果你将整数文字转换为动态,你将不会在编译时得到任何错误(但你在运行时做):

int x = F((dynamic)2);