是否会在发布版本中评估提供给Debug.Assert的表达式?

Mar*_*lug 4 .net c# conditional-compilation

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

bool IsCompatible(Object x, Object y) { 
  // do expensive stuff here
}
Run Code Online (Sandbox Code Playgroud)

如果我用以下方法测试这个断言:

Debug.Assert(IsCompatible(x,y));
Run Code Online (Sandbox Code Playgroud)

IsCompatible是否会在发布版本中执行?

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

我应该这样做:

#if DEBUG
Debug.Assert(IsCompatible(x,y));
#endif
Run Code Online (Sandbox Code Playgroud)

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

SLa*_*aks 8

没有.

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

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