【问题标题】:Will the expression provided to Debug.Assert be evaluated in a release build?是否会在发布版本中评估提供给 Debug.Assert 的表达式?
【发布时间】:2012-11-03 05:37:08
【问题描述】:

假设我有一个相当昂贵的断言:

bool IsCompatible(Object x, Object y) { 
  // do expensive stuff here
}

如果我测试这个断言:

Debug.Assert(IsCompatible(x,y));

IsCompatible 会在发布版本中执行吗?

我的理解是 Debug.Assert 被标记为 [Conditional("DEBUG")],对它的调用只会在调试版本中发出。我认为这不会阻止表达式在发布模式下被评估,因为方法调用可能有副作用,只有将结果传递给 Debug.Assert 不会被发出。对吗?

我应该这样做:

#if DEBUG
Debug.Assert(IsCompatible(x,y));
#endif

为了确保我在发布模式下不支付 IsCompatible 的费用?

【问题讨论】:

    标签: c# .net conditional-compilation


    【解决方案1】:

    没有。

    Debug.Assert[Conditional("DEBUG")] 装饰。

    当编译器编译对该方法的调用时,它将删除整个语句,除非在调用项目中定义了DEBUG

    【讨论】:

    • +1。请注意,除非有人将DEBUG 添加到发布配置中,否则它是正确的。
    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 2013-12-15
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多