如果我有一个动态参数,编译器似乎抛弃了返回类型并认为它是动态的。
例如:
public MethodResult IsValid(object userLogin)
{
return new MethodResult();
}
你会想:
var isValidResult = IsValid(someObject());
应该读作
dynamic -> MethodResult
但它认为它是:
dynamic -> dynamic
在签名中添加动态参数是否会完全阻止编译器知道返回应该是什么,尽管返回是强类型的?
答案 0 :(得分:25)
是的,动态会阻止编译器知道任何参数,属性或方法返回类型的类型。添加一个显式的强制转换,如:
(MethodResult)IsValid(someObject));
这里的原因是,一旦你进入C#的动态世界,你就会进入后期绑定。编译器无法验证此代码,因为它无法再使用任何静态类型分析。所以它推迟到以后。您可以通过提供静态强制转换作为编译器的指南来帮助解决这个问题。