为了账号安全,请及时绑定邮箱和手机立即绑定

可拓方法与动态对象

可拓方法与动态对象

C#
隔江千里 2019-06-26 13:58:53
可拓方法与动态对象我将把我的问题总结成下面的代码片段。List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 };Console.WriteLine(list.First());以上代码运行良好。现在我尝试了以下几种方法dynamic dList = list;  Console.WriteLine(dList.First());但是我得到RuntimeBinderException,为什么会这样?
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

动态类型不支持扩展方法以可拓方法的形式,即调用它们就好像它们是实例方法一样。然而,这将起作用:

dynamic dList = list;Console.WriteLine(Enumerable.First(dList));

当然,这可能有用,也可能没有用。如果您能够提供更多关于为什么和如何使用动态类型的信息,我们可能会提供更多帮助。


查看完整回答
反对 回复 2019-06-26
?
弑天下

TA贡献1818条经验 获得超8个赞

个方法不起作用的原因是,在常规的、非动态的代码扩展方法中,通过对编译器已知的所有类进行完全搜索,可以找到一个具有匹配扩展方法的静态类。根据名称空间嵌套和可用进行搜索。using每个命名空间中的指令。

这意味着为了正确解析动态扩展方法调用,dlr必须知道在运行时所有的命名空间嵌套和using指示在你的源代码中..我们没有方便地将所有这些信息编码到呼叫站点的机制。我们曾考虑发明这样一种机制,但认为成本太高,产生的进度风险太大,不值得。


查看完整回答
反对 回复 2019-06-26
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

因为First()不是.的方法List..它在Linq扩展中定义为IEnumerable<>


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 339 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信