动态参数的问题

Ale*_*aro 5 .net c# dynamic

我有这个功能

string F(dynamic a)
{
    return "Hello World!";
}
Run Code Online (Sandbox Code Playgroud)

后来当我说

dynamic a = 5;
var result = F(a);
Run Code Online (Sandbox Code Playgroud)

结果必须在编译时是字符串类型,但是没有发生,为什么?事实上,编纂通过这个

int result2 = F(a);
Run Code Online (Sandbox Code Playgroud)

而不是这个

int result3 = F(5);
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

Sel*_*enç 6

这里解释如下:

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

现在,F(a)由于a是动态的,编译器不会在编译时检查重载.但是当你说:

F(2);
Run Code Online (Sandbox Code Playgroud)

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

int x = F((dynamic)2);
Run Code Online (Sandbox Code Playgroud)