如何断言在C#中启用了断言?
Here's a link to a related answer for Java, that does not work in C#.
这样做的目的是防止使用发布类型的程序集,因为在不考虑效率的情况下我可能会运行所有的断言,因此在某些地方偏好调试类型的程序集
使用Debug.Assert(false)
并不令人满意,因为它会创建一个对话框并需要用户互动。知道断言在没有“噪音”的情况下工作会很好。 Java解决方案没有噪音。
答案 0 :(得分:5)
更新:有一个更简单的解决方案。另一个仍然是好奇的。
int x = 2 ;
int *y = &x ;
printf("%d", *y);
看起来很讨厌,但很简单。
让我们首先看一下导致'student' redeclared as different kind of symbol
在非DEBUG版本中消失的原因:
public static bool AreAssertionsEnabled =
#if DEBUG
true
#else
false
#endif
;
这是Debug.Assert
。这激发了以下解决方案:
[Conditional("DEBUG"), __DynamicallyInvokable]
public static void Assert(bool condition)
{
TraceInternal.Assert(condition);
}
您可以重构这一点,以便[Conditional("DEBUG")]
可以public static bool AreAssertionsEnabled = false;
static MyClassName() { MaybeSetEnabled(); /* call deleted in RELEASE builds */ }
[Conditional("DEBUG")]
static void MaybeSetEnabled()
{
AreAssertionsEnabled = true;
}
。我现在想不出办法。
您现在可以检查布尔值AreAssertionsEnabled
并根据它执行您喜欢的任何逻辑。