私は楽しみのためにばかげた AOT .net コンパイラを作成していますが、問題が発生しました。
アセンブリをメモリにロードし (C# で記述しています)、リフレクションを左右にスパムして、必要な情報 (メソッド本体の CIL など) を取得しています。
このページには、「現在のインスタンスへの参照が必要です (ローカル引数インデックス 0 に格納されています) [...]」と書かれています。ただし、 を呼び出すとMethodInfo.GetParameters()
、この引数は返されません。
生のインデックスではなく、ParameterInfo オブジェクトなどのオペコードのフィールドを解決しているLdarg
ため、「Ldarg.0」がインスタンス メソッド内にあると非常に混乱しますGetParameters
。
私の主な質問:オブジェクト (パラメーター インデックス 0)ParameterInfo
のオブジェクトのインスタンスを取得する方法はありthis
ますか、それとも生のインデックスを使用する必要がありますか? (私は本当にintインデックスを使いたくない...)
コードは素晴らしいので、ここにいくつかのコードを示します。(クラスのプログラム内に含まれています)
static void Main(string[] args)
{
// obviously throws an IndexOutOfRangeException instead of returning the (true) argument 0
Console.WriteLine(typeof (Program).GetMethod("Test").GetParameters()[0]);
}
public void Test()
{
}