我有当前的方法示例:
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。
我确信必须有办法,也许使用堆栈,谁知道。你们是专家,这就是我来这里的原因。
提前谢谢,我迫不及待地想看看这是怎么回事。
修改
这里可能不太清楚一些额外的信息。这个代码示例就是一个显示我想要的示例。如果在不需要手动创建数组的情况下如何获取数组,那么显示实际代码将是臃肿和大的。我需要了解如何获取值并将它们放在数组中而不编码特定参数。
答案 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);
}
}
}