2010-05-10 32 views
2

我知道,如果我有一個代碼塊,我不希望在編譯時在釋放模式,我可以換行的代碼塊:什麼是.NET特性不能在發佈模式下編譯方法?

#if DEBUG 
    while(true) 
{ Console.WriteLine("StackOverflow rules"); } 
#endif 

這將使該代碼塊從比其他任何模式下編譯DEBUG

我知道有一個屬性可以放在一個可以做同樣的事情的整個方法上,但是對於我而言,我不記得那個屬性是什麼。我相信它的名稱空間是System.Diagnostics,但我不確定。

順便說一句:我使用的是.NET 4,但我知道這個屬性存在於.NET 2中,因爲我在舊項目中使用過。

感謝

回答

3

這是ConditionalAttribute

指示要的是,方法 呼叫或屬性應該被忽略 除非指定條件 編譯符號被定義編譯器。

您應該將其定義爲[Conditional("DEBUG")],並確保在發佈模式下DEBUG常量沒有被定義。

0

或者到ConditionalAttribute,你可以簡單地使用:

#if (!DEBUG) 
0

當使用ConditionalAttribute,請記住,它不能返回的內容不是void或採取out參數作爲參數的函數中使用。 ref參數很好,因爲該變量在方法調用之前被實例化。

[Conditional("DEBUG")] 
public void Success1(string param) 

[Conditional("DEBUG")] 
public void Success2(ref string param) 

[Conditional("DEBUG")] // out parameter 
public void CompileErrorCS0685(out string param) 

[Conditional("DEBUG")] // non-void function 
public bool CompileErrorCS0578(string param) 
相關問題