2011-11-23 76 views
3

考虑下面的代码:与Debug.Assert的条件编译

#if DEBUG 
    if (Systems.Contains(system)) 
     throw new InvalidOperationException("System already registered"); 
#endif 

    Debug.Assert(!Systems.Contains(system), "System already registered"); 

以前我用来做前者,因为我已经发现Debug.Assert

难道我不应该总喜欢Debug.Assert吗?

  1. 它只存在于调试代码中(它具有属性[Conditional("DEBUG")])。
  2. 在我看来,它更适合我的意图(代码完整性检查,而不是提出例外待处理)。
  3. 这是少写代码。
+0

Debug.Assert的胜利对我来说 –

+1

说实话我在释放模式,而奉送的99%的时间每一次,所以很少用或者 –

+0

@jk:真。在这种情况下,这是针对游戏的,所以尽可能避免像这样的检查,但在调试时尽快得到错误是可以的。 –

回答

4

您可以随时使用Debug.Assert的(),因为这个类与DEBUG符合条件,以及:

[Conditional("Debug")] 

表示到编译器,一个方法调用或属性应该是 忽略除非定义了指定的条件编译符号。

ConditionalAttribute应用于 Debug和Trace类中定义的方法。
http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx

+1

+1感谢您的信息,尽管我已经意识到[ConditionalAttribute](http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx)(编辑清楚) 。 –

+0

太棒了,那么我会用你的“3.这是更少的代码写。”作为Debug.Assert()的主要原因:-) – CodeZombie

+0

谢谢,我会把它打开一段时间,看看有没有其他答案(没有忘记接受)。 –