Defines.Debug vs #if DEBUG

时间:2011-12-15 10:37:21

标签: c#

我开始使用这样的定义类:

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
}

我看到的优点是:

  1. 确保我不会破坏#if ..#else ..#endif不会被编译器检查。
  2. 我可以查找引用以查看它的使用位置。
  3. 使用bool进行调试通常很有用,定义代码更长/更乱。
  4. 我看到可能的缺点:

    如果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);
    

1 个答案:

答案 0 :(得分:6)

我发现至少有一个很大的缺点:如果Debug为false,则此代码会引发警告:

if (Debug)
    Console.WriteLine("Debug");

因为编译器会检测到从未满足条件,所以Console.WriteLine调用无法访问。