1

我有当前的方法示例:

public void MethodName(string param1,int param2)
{
    object[] obj = new object[] { (object) param1, (object) param2 };
    //Code to that uses this array to invoke dynamic methods
}

是否有一种动态方式(我猜是使用反射)可以获取当前执行的方法参数值并将它们放在对象数组中?我已经读到您可以使用 MethodBase 和 MethodInfo 获取参数信息,但那些只有关于参数的信息,而不是我需要的它自身的值。

因此,例如,如果我将“test”和 1 作为方法参数传递而没有对特定参数进行编码,我可以获得一个具有两个索引 {“test”,1} 的对象数组吗?

我真的很想不必使用第三方 API,但是如果它有该 API 的源代码,那么我会接受它作为答案,只要它不是一个巨大的 API 并且没有这个就没有简单的方法来做到这一点API。

我相信一定有办法,也许使用堆栈,谁知道呢。你们是专家,这就是我来这里的原因。

提前谢谢你,我迫不及待地想看看这是怎么做到的。

编辑

可能不清楚,所以这里有一些额外的信息。这个代码示例就是这样,一个显示我想要的示例。在需要的地方显示实际代码会显得臃肿而庞大,但问题是如何在不手动创建数组的情况下获取数组。我需要一些如何获取值并将它们放在数组中而不编码特定参数的方法。

4

1 回答 1

2

使用反射,您可以提取参数名称和元数据,但不能提取实际值:

  class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            p.testMethod("abcd", 1);
            Console.ReadLine();
        }

        public void testMethod(string a, int b)
        {
            System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
            StackFrame sf = st.GetFrame(0);
            ParameterInfo[] pis = sf.GetMethod().GetParameters();

            foreach (ParameterInfo pi in pis)
            {
                Console.Out.WriteLine(pi.Name);
            }
        }
    }
于 2012-08-31T15:37:05.940 回答