Я начал использовать класс define следующим образом:
internal sealed class Defines
{
/// <summary>
/// This constant is set to true iff the define DEBUG is set.
/// </summary>
public const bool Debug =
#if DEBUG
true;
#else
false;
#endif
}
Преимущества, которые я вижу:
- Обеспечивает, чтобы я не разбивал материал, который С#if.. # else.. # endif не будет проверяться компилятором.
- Я могу найти ссылки, чтобы увидеть, где они используются.
- Часто бывает полезно иметь bool для отладки, определяет, что код длиннее/более грязно.
Возможный недостаток:
Компилятор не может оптимизировать неиспользуемый код, если класс Defines находится в другой сборке. Вот почему я сделал внутреннее.
У меня отсутствуют другие недостатки?
[Редактировать] Типичные примеры использования:
private readonly Permissions _permissions = Defines.Debug ? Permissions.NewAllTrue()
: Permissions.NewAllFalse();
Или:
var str = string.Format(Defines.Debug ? "{0} {1} ({2})" : "{0} {1}", actual, text, advance);