是否有可能确定成员的返回或参数类型是dynamic
?问题是编译为System.Object
.
我观察到,如果接受参数的成员在其签名中存在类型,则会添加dynamic
一个附加参数。A_0
是否还有更多技巧可以找出类型正在dynamic
使用反射?
我使用dnlib作为我的反射库。该解决方案应适用于所有 dotnet 平台;但是,如果它仅限于 .NET Core,则没什么大不了的。
我正在处理的项目是 C# 库的 Markdown 文档生成器 - 你可以在这里找到它。
感谢您的任何建议。
更新
识别不属于泛型类型参数的类型很简单。
如果返回类型是动态的,那么方法/属性 getter/property setter/delegate/event adder 将在其签名中添加一个名为A_0
.
如果参数是动态的,那么 is 将使用自定义属性进行修饰:System.Runtime.CompilerServices.DynamicAttribute
.
但是,如果动态类型是某个泛型类型 ( Dictionary<object, dynamic>
) 的参数,那么任何泛型参数类型都不会使用上面的自定义属性进行修饰。如果给定的泛型类型由成员返回,则附加参数将出现在成员签名中。如果泛型类型是参数也是如此,它将使用自定义属性进行装饰。
只有当泛型类型只有一个参数或没有其他object
类型参数时,才能可靠地使用这些指示符:
<object, dynamic>
不好<int, dynamic>
好的<dynamic>
好的
附加参数和自定义属性都没有指示哪个通用参数是动态的。
到目前为止,我还没有看到这个问题的解决方案。