LoginSignup
14
15

More than 5 years have passed since last update.

C# 条件付きコンパイルで動作を変える

Posted at

一番よく使いそうなのはデバッグ時のみ実行するコードですね。
Debug.WriteLine メソッドは DEBUG 定数が定義されているときだけに実行されますし、Trace.WriteLine メソッドは TRACE 定数が定義されているときだけに実行されます。

2014-08-31_181111.png

自作の関数で同じことをしたい場合は Conditional 属性を使います。

[Conditional("DEBUG")]
public class Hoge
{
]

public class Huga
{
    [Conditional("DEBUG")]
    private void Dump()
    {
    }
]

このようにクラスに付けたり、特定のメソッドだけに付けたりすることが出来ます。
属性に渡す定数が、条件コンパイル シンボルに含まれているかどうかで決るので、独自の MODE_A と MODE_B を定義して使い分けたりすることも可能です。

私が使ったケースを紹介します。
ある社内システムのデータをクラウドへ毎朝コピーするプログラムを作成しました。
運用を開始して一ヶ月後に、お客さんからエラーが発生したと聞いて現地で調査しました。
デバッグ実行で追いかけてみることにしましたが、その際にデータが更新されて再現しなくなってしまうと困るので、レコードの追加・更新・削除はいつでも無効化できるように、クラスに Conditional("DB_UPDATE") を付けておきました。
おかげでデバッグ実行するときに DB_UPDATE を削除するだけでコードを変更せずに動作を変更出来ました。

ほかにも効果的な使い方があったら教えてください(゚∀゚)ノ

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15