我有一个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
答案 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。