0

是否有可能确定成员的返回或参数类型是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> 好的

附加参数和自定义属性都没有指示哪个通用参数是动态的。

到目前为止,我还没有看到这个问题的解决方案。

4

0 回答 0