Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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# 使用Mono.Cecil从ByReferenceType获取泛型参数_C#_.net_Cil_Il_Mono.cecil - Fatal编程技术网

C# 使用Mono.Cecil从ByReferenceType获取泛型参数

C# 使用Mono.Cecil从ByReferenceType获取泛型参数,c#,.net,cil,il,mono.cecil,C#,.net,Cil,Il,Mono.cecil,我有一个获取参数的方法,例如: public void Foo(ref Action<string> bar); 不知何故,它丢失了泛型参数,不再是泛型InstanceType 如何正确地取消对byref参数的引用,并获得实际的泛型实例类型?您可以使用此方法深入了解TypeSpec(当然,当您知道您想要什么时,您可以将其缩短): GetElementType方法返回构造TypeSpec的原始元素类型。我很确定这是用于指示泛型方法的符号……是的,它是一个接受一个泛型参数的泛型方法,但

我有一个获取参数的方法,例如:

public void Foo(ref Action<string> bar);
不知何故,它丢失了泛型参数,不再是泛型InstanceType


如何正确地取消对byref参数的引用,并获得实际的泛型实例类型?

您可以使用此方法深入了解TypeSpec(当然,当您知道您想要什么时,您可以将其缩短):


GetElementType方法返回构造TypeSpec的原始元素类型。

我很确定这是用于指示泛型方法的符号……是的,它是一个接受一个泛型参数的泛型方法,但它不提供有关泛型参数类型的信息。泛型InstanceType将生成诸如System.Action`1之类的全名,而GenericParameters成员中的第一个TypeReference对象将是System.String。我尝试过类似的方法,但没有成功:(GenericInstanceType)(parameter.ParameterType.GetElementType())=>“无法将'parameter.ParameterType.GetElementType()'(其实际类型为'Mono.Cecil.TypeReference')强制转换为'Mono.Cecil.GenericInstanceType'”@aethoric:这与此不同。请使用ElementType属性,而不是GetElementType方法。诚然,此处的命名可能更好,但ElementType返回类型链中的直接前置类型,GetElementType返回根类型。
System.Action`1
ParameterDefinition parameter = ...;
ByReferenceType byref = (ByReferenceType) parameter.ParameterType;
GenericInstanceType action_string = (GenericInstanceType) byref.ElementType;
TypeReference action = action_string.ElementType;
TypeReference str = action_string.GenericArguments [0];