在运行时从方法获取参数值

时间:2012-08-31 15:06:09

标签: c#-4.0 reflection methods parameters runtime

我有当前的方法示例:

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。

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

提前谢谢,我迫不及待地想看看这是怎么回事。

修改

这里可能不太清楚一些额外的信息。这个代码示例就是一个显示我想要的示例。如果在不需要手动创建数组的情况下如何获取数组,那么显示实际代码将是臃肿和大的。我需要了解如何获取值并将它们放在数组中而不编码特定参数。

1 个答案:

答案 0 :(得分: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);
            }
        }
    }