私は楽しみのためにばかげた 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()
{
}