是否会在发布版本中评估提供给Debug.Assert的表达式?
说我有一个相当昂贵的断言:
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的费用?
没有。
Debug.Assert
用[Conditional("DEBUG")]
装饰。
当编译器编译对此方法的调用时,它将删除整个语句,除非在调用项目中定义了DEBUG
。