请考虑以下JavaScript代码段:
Object.prototype.log = function() {
// here, you have a centralized place to do logging stuff;
console.log(this);
}
function fullName(firstName, lastName)
{
// here, using a simple one-line code, you can log all parameters;
arguments.log();
}
fullName('saeed', 'nemati');
我们是否可以使用类似的机制来记录传递给方法的所有参数,在C#中?
注意:我所做的是使用反射,但没有成功:
public static void LogParameters(this ParameterInfo[] parameters)
{
StringBuilder builder = new StringBuilder();
builder.Append("*****************\r\n");
builder.Append("Parameters\r\n");
parameters.ToList().ForEach(pi =>
{
builder.AppendFormat("{0} => {1}\r\n", pi.Name, pi.DefaultValue);
// The problem is that, I can't get the value of the parameter here
});
builder.Append("*****************");
Log.Write(builder.ToString());
}
public string GetFullName(string firstName, string lastName)
{
MethodBase.GetCurrentMethod().GetParameters().LogParameters();
return firstName + " - " + lastName;
}
GetFullName("saeed", "neamati");
答案 0 :(得分:7)
不,您无法使用反射获取参数值。您必须明确地将它们传递给日志记录方法。
您可以使用调试器API执行此操作,但您可能不希望这样做。如果我是你,我会明确地做 - 事实上,这可能会导致更有用的日志记录,因为你只能记录重要内容,并在消息中提供一些上下文。
答案 1 :(得分:2)
您可以使用PostSharp和AOP进行操作。这是一个示例,它还记录了方法调用的参数。