可拓方法与动态对象我将把我的问题总结成下面的代码片段。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));
当然,这可能有用,也可能没有用。如果您能够提供更多关于为什么和如何使用动态类型的信息,我们可能会提供更多帮助。
弑天下
TA贡献1818条经验 获得超8个赞
个方法不起作用的原因是,在常规的、非动态的代码扩展方法中,通过对编译器已知的所有类进行完全搜索,可以找到一个具有匹配扩展方法的静态类。根据名称空间嵌套和可用进行搜索。using
每个命名空间中的指令。
这意味着为了正确解析动态扩展方法调用,dlr必须知道在运行时所有的命名空间嵌套和using
指示在你的源代码中..我们没有方便地将所有这些信息编码到呼叫站点的机制。我们曾考虑发明这样一种机制,但认为成本太高,产生的进度风险太大,不值得。
- 3 回答
- 0 关注
- 339 浏览
添加回答
举报
0/150
提交
取消