2015-12-02 20 views
45

C#では、ビルドのタイプに応じてコードの実行を区別できます。デフォルトでは、デバッグとリリースの種類が定義されています。
は、我々は#ifディレクティブ使用してそれを行うことができます。またはC#の条件付き属性の演算子

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

をしかし、我々はまた、Conditional属性を使用することができます:第二の溶液をさらに保守性であると主張されている

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

を(参照:ビルが実効的にC#のワーグナー)。

私の質問です - 多くのビルド設定でConditional属性を使用するにはどうすればよいですか?どういうわけかor演算子を使用することはできますか?私はいくつかのFooメソッドを、例えばDEBUGとBARビルドの両方の設定で実行させたいからです。それでは?あなたは複数のカンマを使用することができます

+2

[documentation](https://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute(v = vs.110).aspx)の例に示すように、複数回適用するだけです) –

+2

はい、それは可能です( 'ConditionalAttribute'の' AttributeUsageAttribute'は 'AllowMultiple'を' true'に設定しています)。しかし、あなたの2つの例は、( '#if DEBUG'をメソッド本体内に移動しても)関係するパラメータがあります。 –

+0

@AdrianoRepettiあなたは彼らの行動がどう違うかを詳しく説明できますか? – Vlad274

答えて

50

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

のような条件属性を分離し、正確にあなたの行動を希望されます - 彼らは論理的にORされます。

参考までにMSDNを参照してください。

+1

[MSDNリファレンス](https://msdn.microsoft.com/en-us/library/z371wyft.aspx#Conditional)もまた明らかな次の質問に回答します:どのようにAND条件式ですか? –

+0

ANDは実際にそこにありますが、私はそれが行われる方法が嫌いです。なぜなら、偶然、どこか別の場所に呼び出されたメソッドを入れ子にしてしまい、条件付き属性に違反してしまうからです。あなた自身の属性にAND条件をラップすると、より安全な結果が得られます。 – MVCDS