C# 如何识别返回和/或接受动态类型的成员
是否有可能确定成员的返回或参数类型是动态的?问题是它编译成C# 如何识别返回和/或接受动态类型的成员,c#,reflection,dnlib,C#,Reflection,Dnlib,是否有可能确定成员的返回或参数类型是动态的?问题是它编译成System.Object 我注意到,如果接受参数的成员的签名中存在dynamic类型,则会添加一个额外的参数a_0 有没有更多的技巧可以利用反射来确定类型是动态的 我正在使用作为我的反射库。这个解决方案应该适用于所有的dotnet平台;然而,如果它仅限于.NETCore,那也没什么大不了的 我正在做的项目是一个C#libraries的降价文档生成器——你可以找到它 谢谢你的建议 更新 识别不属于泛型类型参数的类型很简单 如果返回类型是
System.Object
我注意到,如果接受参数的成员的签名中存在dynamic
类型,则会添加一个额外的参数a_0
有没有更多的技巧可以利用反射来确定类型是动态的
我正在使用作为我的反射库。这个解决方案应该适用于所有的dotnet平台;然而,如果它仅限于.NETCore,那也没什么大不了的
我正在做的项目是一个C#libraries的降价文档生成器——你可以找到它
谢谢你的建议
更新
识别不属于泛型类型参数的类型很简单
如果返回类型是动态的,那么方法/属性getter/property setter/delegate/event adder的签名中将有一个额外的参数,名为a\u 0
如果一个参数是动态的,那么它将被一个自定义属性修饰:System.Runtime.CompilerServices.DynamicAttribute
但是,如果动态类型是某个泛型类型(Dictionary
)的参数,则所有泛型参数类型都不会使用上述自定义属性进行修饰。如果给定的泛型类型由成员返回,则附加参数将出现在成员签名中。如果泛型类型是一个参数,那么它将被一个自定义属性修饰
只有当泛型类型只有一个参数或没有其他对象
类型参数时,才能可靠地使用这些指示符:
不正常
正常
正常
到目前为止,我还没有找到这个问题的解决方案。您已经找到了“动态”属性,您尝试过使用它吗?@问题是,如果我有一个
公共对象MyMethod(动态arg)
或公共动态MyMethod(对象arg)
,那么这两个属性都将在反射中显示为公共对象MyMethod(A_0,object arg)
。因此,我无法确定哪一个是动态类型。我不确定如何在反射库中使用它,但当您使用dynamic as return和object as parameter时,您有.param[0]
而当您使用object as return和dynamic as parameter时,您有.param[1]