.NET断言断言已启用

H2O*_*aCl 3 .net c# assertions

如何断言在C#中启用断言?

这是Java相关答案的链接,它在C#中不起作用.

这样做的目的是防止使用发布类型的程序集,因为在不考虑效率的情况下我可能会运行所有的断言,因此在某些地方偏好调试类型程序集.

使用Debug.Assert(false)不令人满意,因为它创建了一个对话框并需要用户交互.知道断言在没有"噪音"的情况下工作会很好.Java解决方案是无噪音的.

usr*_*usr 5

更新:有一个更简单的解决方案.对于好奇的人来说,另一个仍在下面.

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并根据它执行您喜欢的任何逻辑.