Pro*_*ool 31 c# c#-4.0 dynamictype
如果我有一个动态参数,编译器似乎抛弃了返回类型并认为它是动态的.
例如:
public MethodResult IsValid(object userLogin)
{
return new MethodResult();
}
Run Code Online (Sandbox Code Playgroud)
你会认为:
var isValidResult = IsValid(someObject());
Run Code Online (Sandbox Code Playgroud)
应该读作
dynamic -> MethodResult
Run Code Online (Sandbox Code Playgroud)
但它认为它是:
dynamic -> dynamic
Run Code Online (Sandbox Code Playgroud)
为签名添加动态参数是否完全阻止编译器知道返回应该是什么,尽管返回是强类型的?
Jos*_*ers 28
是的,dynamic阻止编译器知道任何参数,属性或方法返回类型的类型.添加一个显式的强制类似:
(MethodResult)IsValid(someObject));
Run Code Online (Sandbox Code Playgroud)
这里的原因是,一旦你进入C#的动态世界,你就会进入后期绑定.编译器无法验证此代码,因为它无法再使用任何静态类型分析.所以它推迟到以后.您可以通过提供静态强制转换作为编译器的指南来帮助解决这个问题.
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |