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

本文关键字:动态 返回 方法 参数 编译器 | 更新日期: 2023-09-27 18:11:40

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

例如:

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

你会认为:

var isValidResult = IsValid(someObject());

应该读作

dynamic -> MethodResult 

但它认为它是:

dynamic -> dynamic

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

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

是的,动态阻止编译器知道任何参数、属性或方法返回类型的类型。添加显式强制转换,如:

(MethodResult)IsValid(someObject));

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

相关文章: