我需要在十几个函数中记录所有函数参数。
有没有办法以编程方式确定所有参数及其值(或至少是它们的.ToString()值)?也许是通过反思?
答案 0 :(得分:1)
以下是如何使用PostSharp
执行此操作的示例您也可以自己动手
http://www.developerfusion.com/article/5307/aspect-oriented-programming-using-net/3/
答案 1 :(得分:1)
据我所知,没有办法使用反射来动态列出和确定局部变量的值。您可以使用反射来获取有关方法参数的类型信息,但只能使用声明的类型 - 您无法自动获取有关实际参数的信息,因为反射元数据提供了有关方法定义的信息,而不是在运行时传递给它的特定值。
但是,您可以这样做:
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()));
}