我正在製作一個愚蠢的AOT .net編譯器以獲得樂趣,並且遇到了問題。我只是將程序集加載到內存中(我正在用C#編寫它)和垃圾郵件反射左右獲取我需要的信息(例如方法體的CIL)。C#反射 - 獲取方法的全部參數列表(包括「this」的參數)
This page說:「我們需要對當前實例的引用(存儲在本地參數索引0中)[...]」。但是,當我撥打MethodInfo.GetParameters()
時,不會返回此參數。
我解決操作碼,如Ldarg
到的ParameterInfo對象,而不是原始指標的領域,所以它會非常迷茫的時候「Ldarg.0」是一個實例方法中的 - 因爲ARG 0不GetParameters
!
我的主要問題:是否有某種方式可以獲得this
對象(參數索引0)的ParameterInfo
對象的實例,還是我必須使用原始索引? (我真的不想使用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()
{
}
所以我想我將不得不使用原始詮釋指數,只是有一個「如果實例和arg0然後加載'這個'」?我很害怕,但我想這不是太可怕。 – khyperia 2013-05-11 16:36:53
@khyperia我只是使用實用方法,根據是否存在偏移量採取不同的行爲。你可以用null來表示「this」。 – 2013-05-11 16:42:45
感謝您的想法,使用null沒有發生在我身上。 – khyperia 2013-05-11 17:04:11