Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何识别返回和/或接受动态类型的成员_C#_Reflection_Dnlib - Fatal编程技术网

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]