Можно ли украсить ЛИНЕЙКУ КОДА условным атрибутом? (или что-то подобное) - PullRequest
2 голосов
/ 07 января 2010

Я планирую поместить вызов MethodBase.GetCurrentMethod () в начале большинства методов (для информативного ведения журнала), но, поскольку это потребует больших затрат, было бы хорошо, если бы использовался условный атрибут, например

#define LogMethodNames

где ...

[Conditional("LogMethodNames")]

ставится над каждым вызовом строки GetCurrentMethod (), например:

void DoStuff()
{
    [Conditional("LogMethodNames")]
    logger.CurrentMethod = MethodBase.GetCurrentMethod();

    //  stuff done here
}

... так что, по крайней мере, его можно исключить из сборок релиза.

Возможно ли что-то подобное?

Спасибо!

Gregg

PS Я бы попробовал это сам сейчас, но по какой-то причине я не смог заставить работать Атрибуты из-за ошибки компиляции. Doh.

PPS Если это не сработает, я бы создал метод, который присваивает объекту логгера, например:

void SetCurrentMethod(MethodBase currentMethod)
{
    logger.CurrentMethod = currentMethod;
}

и использование:

void DoStuff()
{
    [Conditional("LogMethodNames")]
    SetCurrentMethod(MethodBase.GetCurrentMethod());

    //  stuff done here
}

Есть мысли ?! Спасибо: -)

1 Ответ

1 голос
/ 07 января 2010

Вы близки - вам нужно установить атрибут Conditional для самого метода:

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

Подробнее см. Условный атрибут :

Атрибут Условный включает определение условных методов. Условный атрибут указывает на условие путем тестирования условного символ компиляции. Звонки в условный метод либо включены или опущено в зависимости от того, является ли это символ определяется в точке вызов. Если символ определен, звонок включен; в противном случае вызов (включая оценку параметры вызова) опущен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...