Defines.Debug vs #if DEBUG

wes*_*ton 10 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
}
Run Code Online (Sandbox Code Playgroud)

我看到的优点是:

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

我看到可能的缺点:

如果Defines类在另一个程序集中,则编译器无法优化未使用的代码.这就是我做内部的原因.

我错过了任何其他缺点吗?

[编辑]典型的用法示例:

private readonly Permissions _permissions = Defines.Debug ? Permissions.NewAllTrue()
                                                          : Permissions.NewAllFalse();
Run Code Online (Sandbox Code Playgroud)

要么:

var str = string.Format(Defines.Debug ? "{0} {1} ({2})" : "{0} {1}", actual, text, advance);
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 6

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

if (Debug)
    Console.WriteLine("Debug");
Run Code Online (Sandbox Code Playgroud)

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