【发布时间】:2009-11-20 20:11:44
【问题描述】:
我需要记录十几个函数中的所有函数参数。
有没有办法以编程方式确定所有参数及其值(或至少它们的 .ToString() 值)?也许通过反射?
【问题讨论】:
标签: reflection c#-2.0 function-parameter
我需要记录十几个函数中的所有函数参数。
有没有办法以编程方式确定所有参数及其值(或至少它们的 .ToString() 值)?也许通过反射?
【问题讨论】:
标签: reflection c#-2.0 function-parameter
【讨论】:
据我所知,没有办法使用反射来动态列出和确定局部变量的值。您可以使用反射来获取有关方法参数的类型信息,但只能使用 声明的 类型 - 您无法自动获取有关实际参数的信息,因为反射元数据提供了有关方法定义的信息,而不是在运行时传递给它的特定值。
但是,您可以这样做:
static class Extensions
{
public static string GetTypeAndValue(this object obj)
{
return String.Format("{0}: {1}", obj.GetType().Name, obj.ToString());
}
}
然后,在您要执行日志记录的每个方法中,执行类似
的操作private void SomeMethodToBeLogged(string some_string, int some_int, bool some_bool)
{
Logger.Log(String.Format("SomeMethodToBeLogged({0}, {1}, {2})",
some_string.GetTypeAndValue(),
some_int.GetTypeAndValue(),
some_bool.GetTypeAndValue()));
}
【讨论】: