2015-12-02 42 views
45

在C#中,我們可以根據構建類型區分代碼執行。默認情況下,我們定義了Debug和Release類型。
我們可以使用#if指令做:或C中條件屬性中的運算符#

#if DEBUG 
    public void Foo() 
    { ... } 
#endif 

但是,我們也可以使用Conditional屬性:第二個解決方案,甚至自稱是更容易維護

[Conditional("DEBUG")] 
public void Foo() 
{ ... } 

(參見:有效的C#比爾瓦格納)。

我的問題是 - 我如何在許多構建配置中使用Conditional屬性?有沒有可能以某種方式使用or運算符?我問,因爲我想要在例如DEBUG和BAR構建配置中執行一些Foo方法。然後怎樣呢?

+2

只需多次應用它,如[documentation](https://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute(v = vs.110).aspx中的示例所示) –

+2

是的,有可能(ConditionalAttribute的'AttributeUsageAttribute'將'AllowMultiple'設置爲'true'),但請注意,您的兩個示例行爲非常不同(即使您在方法體內移動了'#if DEBUG')有涉及的參數。 –

+0

@AdrianoRepetti你可以詳細說明他們將如何表現不同嗎? – Vlad274

回答

50

您可以使用多個逗號隔開條件屬性像

[Conditional("DEBUG"), Conditional("BAR")] 

,它將您的精確期望的行爲 - 它們將被邏輯或在一起。

參見MSDN以供參考。

+1

請注意[MSDN參考](https://msdn.microsoft.com/en-us/library/z371wyft.aspx#Conditional)也回答了明顯的下一個問題:你如何與'Conditionals'? –

+0

AND是真的存在,但我不喜歡這樣做的方式,因爲你最終會嵌套的方法,可能是,意外地,調用別的地方 - 違反條件屬性。也許用你自己的屬性包裝你的AND條件給你一個更安全的結果。 – MVCDS