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