动态参数使编译器认为方法返回是动态的

如果我有一个动态参数,编译器似乎抛弃了返回类型并认为它是动态的。

例如:

public MethodResult IsValid(object userLogin) { return new MethodResult(); } 

你会认为:

 var isValidResult = IsValid(someObject()); 

应该读作

 dynamic -> MethodResult 

但它认为它是:

 dynamic -> dynamic 

向签名添加动态参数是否完全阻止编译器知道返回应该是什么,尽管返回是强类型的?

是的,dynamic阻止编译器知道任何参数,属性或方法返回类型的类型。 添加一个显式的强制类似:

 (MethodResult)IsValid(someObject)); 

这里的原因是,一旦你进入C#的动态世界,你将进入后期绑定。 编译器无法validation此代码,因为它无法再使用任何静态类型分析。 所以它推迟到以后。 您可以通过提供静态强制转换作为编译器的指南来帮助解决这个问题。