我计划在大多数方法的开头调用MethodBase.GetCurrentMethod()(用于信息性日志记录),但由于这会产生很高的开销,所以如果可以使用条件属性,那将是很好的:
#define LogMethodNames
其中...
[Conditional("LogMethodNames")]
被置于每行调用GetCurrentMethod()之上,如:
void DoStuff()
{
[Conditional("LogMethodNames")]
logger.CurrentMethod = MethodBase.GetCurrentMethod();
// stuff done here
}
...所以至少它可以从发布版本中排除。
这些方面的内容是否可能?
谢谢!
格雷格
PS我现在会自己尝试这个但是由于某种原因,由于编译错误我无法使属性工作。卫生署。
PPS如果这不起作用,我会创建一个分配给记录器对象的方法,如:
void SetCurrentMethod(MethodBase currentMethod)
{
logger.CurrentMethod = currentMethod;
}
并使用:
void DoStuff()
{
[Conditional("LogMethodNames")]
SetCurrentMethod(MethodBase.GetCurrentMethod());
// stuff done here
}
有什么想法吗?!谢谢: - )
答案 0 :(得分:1)
你很接近 - 你需要在方法本身上设置Conditional
属性:
[Conditional("LogMethodNames")]
void SetCurrentMethod(MethodBase currentMethod)
{
logger.CurrentMethod = currentMethod;
}
有关详细信息,请参阅The Conditional attribute:
Conditional属性启用 条件方法的定义。该 条件属性表示a 通过测试条件的条件 编译符号。打电话给 包含条件方法 或者省略取决于是否这样 符号定义在 呼叫。如果符号已定义,则 电话包括在内;否则,电话 (包括评估 省略了调用的参数。