一番よく使いそうなのはデバッグ時のみ実行するコードですね。
Debug.WriteLine メソッドは DEBUG 定数が定義されているときだけに実行されますし、Trace.WriteLine メソッドは TRACE 定数が定義されているときだけに実行されます。
自作の関数で同じことをしたい場合は Conditional 属性を使います。
[Conditional("DEBUG")]
public class Hoge
{
]
public class Huga
{
[Conditional("DEBUG")]
private void Dump()
{
}
]
このようにクラスに付けたり、特定のメソッドだけに付けたりすることが出来ます。
属性に渡す定数が、条件コンパイル シンボルに含まれているかどうかで決るので、独自の MODE_A と MODE_B を定義して使い分けたりすることも可能です。
私が使ったケースを紹介します。
ある社内システムのデータをクラウドへ毎朝コピーするプログラムを作成しました。
運用を開始して一ヶ月後に、お客さんからエラーが発生したと聞いて現地で調査しました。
デバッグ実行で追いかけてみることにしましたが、その際にデータが更新されて再現しなくなってしまうと困るので、レコードの追加・更新・削除はいつでも無効化できるように、クラスに Conditional("DB_UPDATE") を付けておきました。
おかげでデバッグ実行するときに DB_UPDATE を削除するだけでコードを変更せずに動作を変更出来ました。
ほかにも効果的な使い方があったら教えてください(゚∀゚)ノ