C# 获取方法的完整参数列表(包括"this"的参数)



我正在做一个愚蠢的AOT .net编译器,为了好玩,然后遇到了一个问题。

我只是将程序集加载到内存中(我用c#编写),并向左右发送反射以获得我需要的信息(例如方法体的CIL)。

这个页面说"我们需要对当前实例的引用(存储在本地参数索引0中)[…]"。然而,当我调用MethodInfo.GetParameters()时,这个参数没有返回。

我正在解析操作码中的字段,如Ldarg到ParameterInfo对象,而不是原始索引,所以当"Ldarg.0"在实例方法内时,它会变得非常混乱-因为arg 0不在GetParameters中!

我的主要问题:是否有某种方式我可以获得this对象(参数索引0)的ParameterInfo对象的实例,或者我必须只使用原始索引?(我真的不想使用int索引…)

这里有一些代码,因为代码是好的。(包含在类Program中)

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()
{
}

你不会得到一个ParameterInfo。简单地说:如果它是一个实例方法,则有一个"this"映射到该方法声明类型的arg-0。除了类型之外,它没有名称,也没有其他有趣的属性。所有其他参数偏移1。对于静态方法,情况并非如此。请注意,对于值类型上的实例方法,它是一个by-ref参数,这会变得更加有趣。

相关内容

  • 没有找到相关文章

最新更新