H2O*_*aCl 3 .net c# assertions
如何断言在C#中启用断言?
这样做的目的是防止使用发布类型的程序集,因为在不考虑效率的情况下我可能会运行所有的断言,因此在某些地方偏好调试类型程序集.
使用Debug.Assert(false)不令人满意,因为它创建了一个对话框并需要用户交互.知道断言在没有"噪音"的情况下工作会很好.Java解决方案是无噪音的.
更新:有一个更简单的解决方案.对于好奇的人来说,另一个仍在下面.
public static bool AreAssertionsEnabled =
#if DEBUG
true
#else
false
#endif
;
Run Code Online (Sandbox Code Playgroud)
看起来很讨厌,但很简单.
让我们首先看看Debug.Assert在非DEBUG版本中消失的原因:
[Conditional("DEBUG"), __DynamicallyInvokable]
public static void Assert(bool condition)
{
TraceInternal.Assert(condition);
}
Run Code Online (Sandbox Code Playgroud)
是的[Conditional("DEBUG")].这激发了以下解决方案:
public static bool AreAssertionsEnabled = false;
static MyClassName() { MaybeSetEnabled(); /* call deleted in RELEASE builds */ }
[Conditional("DEBUG")]
static void MaybeSetEnabled()
{
AreAssertionsEnabled = true;
}
Run Code Online (Sandbox Code Playgroud)
你可以重构这个AreAssertionsEnabled就可以了readonly.我现在想不出办法.
您现在可以检查布尔值AreAssertionsEnabled并根据它执行您喜欢的任何逻辑.
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |