0
val it : TypeReference =
System.Func`2<System.Object,TResult>
{ContainsGenericParameter = true;
DeclaringType = null;
ElementType = System.Func`2;
FullName = "System.Func`2<System.Object,TResult>";
GenericArguments = seq [System.Object; TResult];
GenericParameters = seq [];
HasGenericArguments = true;
HasGenericParameters = false;
나는 Mono.Cecil
유형의 GenericArguments
을 얻는 방법을 알아 내려고하고 있으며 아무런 진전을 이루지 못하고있다. 표준 리플렉션 API를 사용하면 Type
에서 GetGenericArguments
메서드를 호출 할 것이지만 여기서는 그런 것이 없습니다. GenericParameters
속성이 있지만 최상위 수준 인 에서만 작동하며 매개 변수가 인수에 매핑되지 않았습니다. 위의 유형에 사용하면 빈 콜렉션이 반환됩니다.TypeReference의 일반적인 인수를 얻는 방법은 무엇입니까?
어떻게 든 완료 될 수 있습니까?
그런데 여기에 언급 된 유형을 가져 오기 위해 사용하는 F # 스크립트가 있습니다. 내 질문은 그 특정 유형에 대해 구체적이지 않다. 필자는 요점을 설명하기 위해 메소드 매개 변수에 일반적인 인수가 필요한 질문 만했다.
#load "load-references-release.fsx"
open Mono.Cecil
open Mono.Cecil.Rocks
let mscorlib_path = @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll"
let mscorlib = AssemblyDefinition.ReadAssembly(mscorlib_path).MainModule
let task = mscorlib.Types |> Seq.find (fun x -> x.Name = "Task`1")
let task_cons = task.GetConstructors()
let con =
task_cons
|> Seq.toArray
|> fun x -> x.[8]
con.Parameters.[0].ParameterType