2016-10-04 49 views
1

我可以在C#中使用#definepreprocessor directive裏面的#if#endif嗎?在C#中的#if中使用#define預處理器指令是否有效#

例如

#if !SILVERLIGHT && !__ANDROID__ && !__IOS__ 
#define SupportsMutex 
#endif 

它看起來像它的作品,但我需要確定。有很多關於這方面的文章,但大多數情況下,在C語言環境而不是C#環境下,C#中的預處理器指令更爲有限。

Visual Studio的突出顯示似乎支持它,但根據語言/編譯器規範它真的有效嗎?

This MSDN page給出瞭如下注釋:

#define指令不能被用於聲明如在C和C通常所做++恆定值。 C#中的常量最好定義爲類或結構的靜態成員。如果你有幾個這樣的常量,可以考慮創建一個單獨的「常量」類來保存它們。

我需要這個,因爲多次使用#if !SILVERLIGHT && !__ANDROID__ && !__IOS__很難管理。

當然,我們也可以將SupportsMutex添加到項目的「條件編譯符號」中,但是這更難以管理且不太透明。

回答

5

是的。縱觀C# specification這種用法的一個具體的例子在部分給出2.5.3聲明指令,並視爲有效:

#define Enterprise 
#if Professional || Enterprise 
    #define Advanced 
#endif 
namespace Megacorp.Data 
{ 
    #if Advanced  
    class PivotTable {...} 
    #endif 
} 
+0

謝謝!趕緊找到! – Julian