使用反射来获取参数的名称

时间:2010-12-16 23:24:32

标签: c# reflection compact-framework

我有一个c#.net 2.0CF应用程序,我不仅要获取传递给函数的参数的类型和值,还要获取变量名。

例如:

void Show<PARAM>(PARAM p)
{
    Debug.WriteLine(string.Format("{0} {1} = {2}", typeof(PARAM).ToString, ???, p.ToString() );
}

bool foo = true;
Show(foo);

会输出“bool foo = true”;

在C ++中,我可以使用##预处理器宏执行此操作。

如果在2.0中无法做到这一点,可以在3.5或4.0中完成吗?

谢谢, PaulH

4 个答案:

答案 0 :(得分:1)

如果我没记错的话,这是不可能的,因为变量名不在程序集中,p是变量名。

答案 1 :(得分:0)

using System.Reflection;


ParameterInfo[] info = MethodInfo.GetCurrentMethod().GetParameters();
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(false);
System.Diagnostics.StackFrame[] frames = trace.GetFrames();

我猜这个值可以从堆栈帧中检索出来。

可以从

中找到参数名称

ParameterInfo [] info = MethodInfo.GetCurrentMethod()。GetParameters();

答案 2 :(得分:0)

public void Show(int value)
    {
        ParameterInfo[] info = MethodInfo.GetCurrentMethod().GetParameters();
        Trace.WriteLine(string.Format("{0} {1}={2}", info[0].ParameterType.ToString(), info[0].Name, value.ToString()));
    }

输出

System.Int32值= 10

答案 3 :(得分:0)

尝试使用PostSharp,它支持Compact Framework。