是否可以用条件属性来装饰LINE OF CODE? (或类似的东西)

时间:2010-01-07 06:25:19

标签: .net logging attributes

我计划在大多数方法的开头调用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
}

有什么想法吗?!谢谢: - )

1 个答案:

答案 0 :(得分:1)

你很接近 - 你需要在方法本身上设置Conditional属性:

[Conditional("LogMethodNames")]
void SetCurrentMethod(MethodBase currentMethod)
{
    logger.CurrentMethod = currentMethod;
}

有关详细信息,请参阅The Conditional attribute

  

Conditional属性启用   条件方法的定义。该   条件属性表示a   通过测试条件的条件   编译符号。打电话给   包含条件方法   或者省略取决于是否这样   符号定义在   呼叫。如果符号已定义,则   电话包括在内;否则,电话   (包括评估   省略了调用的参数。