c# - Defines.Debug 与 #if DEBUG

标签 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 值通常很有用,定义代码更长/更困惑。

我看到的可能的缺点:

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

最佳答案

我至少看到一个很大的缺点:如果 Debug 为 false,这段代码将引起警告:

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

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

关于c# - Defines.Debug 与 #if DEBUG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8518696/

相关文章:

c# - 需要考虑的应用安全问题

c# - 从 MVC View 重定向到 ASPX 页面

c# - 使用反向代理在服务中强制执行 SSL

c# - 多包含超时

c# - 为什么 CLR 在完成从结构到对象的转换后进行装箱?

C# 变量数组

c# - Web API 审计日志记录

c# - 数据网格行标题未根据内容调整大小

c# - C# 中 DSL/自定义类型的工具包?

c# - asp.net 不显示我在 html 中想要的字符串