使用Conditional特性代替#if编译指令。
其实我两个都不会用。。
C++程序员大都很熟悉#ifdef,#ifndef,#if,#else,#elif,#endif这几个条件编译指令,C#中也有类似的指令——#if,#else,#elif,#endif。它们往往用来从同一份代码生成不同的程序版本,如Debug版本和Release版本。
下面是一个例子。
在Release版本中,将生成一个空的checkState方法。不过,该方法还是存在的,所以在运行时会因为空的方法调用而产生轻微的性能损失。
#if指令看起来很好用,但是,它很可能产生下面这样的错误。
显然,#endif的位置放错了一行,这份代码在Debug版本中会正常工作,但在Release版本中将会输出非预期的空行。
相对于#if,C#提供了更好的解决方案:Conditional特性。它强迫开发者把调试代码放在单独的方法内,从而防止出错并提高性能。
下面是用Conditional特性实现的checkState方法。
如果使用上面这份代码,在Release版本中,checkState方法并不会改变,但编译器会去掉所有对checkState方法的调用。
注意,Conditional特性只能应用到返回值为void的方法上。为了防止有可能的错误,一般也不要应用到带参数的方法上。