Если вы не знаете об этом, вы можете проверить «Условный» атрибут . Это позволяет вам декорировать метод, а не вставлять директивы препроцессора:
class SomeClass
{
public void ProductionOperation()
{
//Doin' production stuff
Log(someProductionVariable);
}
[Conditional("DEBUG")]
public static void Log(string message)
{
//Write to a file
}
}
Если вы компилируете в режиме отладки, метод log запишет в файл. Если вы компилируете в режиме релиза, условный метод становится неактивным. Единственное, что нужно иметь в виду, это то, что условный код сделает его в вашей сборке, в отличие от того, если вы опередите его препроцессором - это различие во время выполнения. Однако, пока вы не возражаете против этого, я обнаружил, что это делает код чище.
(Если вы собираетесь это сделать, вы не хотите, чтобы #defining или #undefining переменная DEBUG где-либо в вашем коде).