7

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

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 的费用?

4

1 回答 1

10

不。

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

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

于 2012-11-14T17:08:46.950 回答