c# - 动态参数导致编译器认为方法返回是动态的

标签 c# c#-4.0 dynamictype

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

例如:

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

你会认为:

var isValidResult = IsValid(someObject());

应该读作

dynamic -> MethodResult 

但它认为它是:

dynamic -> dynamic

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

最佳答案

是的,动态阻止编译器了解任何参数、属性或方法返回类型的类型。添加一个明确的强制转换,如:

(MethodResult)IsValid(someObject));

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

关于c# - 动态参数导致编译器认为方法返回是动态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829518/

相关文章:

c# - 类型可以解析字符串的通用类

c# - 类型推断推断的是类的范围,而不是方法,尽管它们是相同的?

c# - 如何将 C# 对象拆箱为动态类型

javascript - 通过 T-SQL 查询或 C# 或 Javascript/AngularJs 1 从多列和行中获取具有最高日期的记录

c# - 如何正确注销事件处理程序

wcf - 如何让 WCF 服务返回带有 HTTP 200 响应代码的错误消息?

java - 从另一个方法动态初始化 POJO

c# - 重构以使用具有不同输入对象的通用函数

c# - 如何使用c#在datagridview中动态添加列

c# - PLINQ 的性能比通常的 LINQ 差