#if symbol | symbolが定義されているときの、コンパイルの範囲を定義する |
#else | |
#elif symbol | |
#endif | |
#define symbol | symbolを定義する |
#undef symbol | symbolを未定義にする |
#warning text | コンパイラの出力に、textを警告として含める |
#error text | コンパイラの出力に、textをエラーとして含める |
#line number | コンパイラのエラーと警告で表示される、行番号とファイル名を変更する |
#region name | Visual Studioのコード エディターのアウトライン機能のための、コード ブロックの指定 |
#endregion name | |
#pragma warning | 警告を抑制する (C# 2.0以降) |
#pragma checksum | ASP.NETのデバッグのためのチェックサムを生成する |
#define DEBUG #if DEBUG // デバッグ時に実行 #else // リリース時に実行 #endif #if !DEBUG // リリース時に実行 #endif
#if (A && !B) // Aが定義されている #elif (!A && B) // Bが定義されている #elif (A && B) // AとBが定義されている #else // AもB定義されていない #endif条件付きコンパイル - C# プリプロセッサ ディレクティブ | Microsoft Learn
#if (A && !B)
は#if A && !B
のように、かっこがなくても構いません。
コンパイルの適用範囲がメソッド全体ならば、ConditionalAttribute属性を指定することでも対応できます。テスト用コードをデバッグ時にのみ実行するには?:.NET TIPS - @IT 一色政彦 (2005/01/07)
[Conditional("DEBUG")] public static void Test() { }ConditionalAttribute クラス (System.Diagnostics) | Microsoft Learn
この場合"DEBUG"が定義されていないと、Test()は呼び出されません。
この属性を指定するメソッドの戻り値の型はvoidでなくてはならず、これに違反すると「戻り値の型が void ではないため、条件付き属性は '***' では無効です。」としてCS0578のエラーとなります。
この#defineと#undefは、プログラムの他のキーワードより前に記述しなければなりません。Compiler Error CS1032 | Microsoft Learn
定義されたシンボルのスコープは、それが定義されたファイル内です。これをすべてのファイルとしたいならば、-defineオプションで指定します。
C++の#defineとは異なり、識別子の置換はできません。
複数の警告はカンマで区切り、接頭辞の"CS"は省略できます。
#pragma warning disable 414, CS3021
警告番号を省略した場合は、すべての警告が無効または有効になります。
この指定をすべてのコードに適用するには、コンパイラ オプションの/nowarnで指定します。これはVisual Studioからならば、プロジェクトのプロパティの[ビルド]にある[警告を表示しない]から設定できます。Errors and Warnings - Build Page, Project Designer (C#) - Visual Studio | Microsoft Learn
これはコンパイラの警告に対して適用するものであり、コード分析の警告には別の方法で指定します。