我将把我的问题总结为以下代码片段。
List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 };
Console.WriteLine(list.First());
上面的代码工作正常。
现在我尝试了以下方法
dynamic dList = list;
Console.WriteLine(dList.First());
但我收到 RuntimeBinderException。为什么会这样?
为了扩展乔恩的答案,这不起作用的原因是因为在常规的非动态代码扩展方法中,通过对编译器已知的所有类进行完整搜索来查找具有匹配扩展方法的静态类。搜索根据命名空间嵌套和可用顺序进行using
每个命名空间中的指令。
这意味着为了正确解析动态扩展方法调用,DLR 必须以某种方式知道在运行时所有命名空间嵌套是什么using
指令是在你的源代码中。我们没有方便的机制将所有这些信息编码到调用站点中。我们考虑发明这样一种机制,但认为成本太高,并且产生太多的进度风险,不值得。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)