Kal*_*rak 24 c# dynamic roslyn
将对象作为动态参数传递时,我收到了意外的RuntimeBinderInternalCompilerException.
我将尝试解释这个场景,因为它太容易粘贴代码了.我正在和Roslyn做一些非常奇怪的讨厌,所以听起来很奇怪.
这种动态传递应该有效,因为类型是兼容的:即,在我的情况下,我可以保证它具有功能匹配的方法/类型.
但是当我去执行change + reloaded方法,并且它收到一个类型为dynamic的对象时,我得到了这个异常.
RuntimeBinderInternalCompilerException was unhandled.
An unexpected exception occurred while binding a dynamic operation
Run Code Online (Sandbox Code Playgroud)
每个MSDN:
此类异常与RuntimeBinderException的不同之处在于,RuntimeBinderException表示在通常的编译器错误意义上无法绑定,而RuntimeBinderInternalCompilerException表示运行时绑定程序本身的故障.
谷歌绝对没有结果.我不知道如何进一步调试它.有什么建议?
(我确实做了一些沙盒测试,以确保自己可以在运行时将不同的程序集加载到测试应用程序中,并将实例类型从不同的程序集传递给接受动态参数的单个方法.所以它在这种情况下有效.)
如果没有更多细节,很难回答这个问题,但阅读您所说的内容,有几点需要注意:
在内部,所有类型名称都是完全限定的。这意味着,如果您尝试将两种类型视为相同,除非它们来自同一程序集、具有相同的命名空间和名称,否则编译器将拒绝您的代码。在 .Net 中获取稍微不同的类型是很棘手的。
dynamic并不总是像你直觉想象的那样有效。如果您正在使用编译器,那么非常值得学习 IL 的工作原理,并查看您的代码和基类库代码以了解它们如何交互。
ILSpy 是一个非常有用的低级 .Net 工作工具: http: //ilspy.net/
| 归档时间: |
|
| 查看次数: |
2253 次 |
| 最近记录: |