#if~#endif が向かない例
(2016/12/03 0:25:54 created.)
#if~#endif で囲むと、#if で指定したプリプロセスのシンボルが存在するかどうかで、囲まれた部分のプログラムをコンパイルするかどうかをスイッチングすることができます。例えば次のようなコードを見てみましょう。
Program.cs
namespace Tips_ConditionalAttribute
{
using System;
class Program
{
static void Main(string[] args)
{
var model = new Sample();
#if DEBUG
model.DebugOutput();
#endif
Console.ReadKey();
}
}
public class Sample
{
#if DEBUG
public void DebugOutput()
{
Console.WriteLine("シンボル \"DEBUG\" が定義されているときのみ実行されます。");
}
#endif
}
}
#if で DEBUG というシンボルを指定しているため、このシンボルが定義されているときだけ DebugOutput() メソッドがコンパイルされることになります。つまり、シンボル DEBUG が定義されていないときは DebugOutput() メソッドが存在しないことになるため、このメソッドを呼び出す部分にも同様に #if~#endif を書かないと、シンボル DEBUG が定義されていない構成でコンパイルしたときにコンパイルエラーとなってしまいます。
このようなケースでは、#if~#endif を両方に書かなくてはならなくなり、コードが煩雑になります。こういった場合は #if~#endif ではなく、Conditional 属性を使用したほうがコードがわかりやすく、ミスが発生する可能性も低くなります。
Tweet