C# 預處理指令
阿新 • • 發佈:2018-10-02
app processor framework war 配置 data- sys app1 RoCE
C# 預處理指令
- #if...else
- #define...undef
- #warning
- #error
- #pragma
- #pragma checksum
#define MYTEST using System; public class MyClass { static void Main() { #if (DEBUG && !MYTEST) Console.WriteLine("DEBUG is defined"); #elif (!DEBUG && MYTEST) Console.WriteLine("MYTEST is defined"); #elif (DEBUG && MYTEST) Console.WriteLine("DEBUG and MYTEST are defined"); #else Console.WriteLine("DEBUG and MYTEST are not defined"); #endif } }
#define 允許你定義一個符號,但不能向符號分配值。 然後通過將該符號用作傳遞給 #if 指令的表達式,該表達式的計算結果為 true。
還可以通過 -define 編譯器選項來定義符號。 可以通過 #undef 取消定義符號。
使用 #define 創建的符號的作用域是在其中定義它的文件。
預定義符號
生成系統還會感知表示不同目標框架的預定義預處理器符號。 在創建可以面向多個.NET 實現或版本的應用程序時,這些符號會很有用。
目標框架 | 符號 |
---|---|
.NET Framework | NET20 , NET35 , NET40 , NET45 , NET451 , NET452 , NET46 , NET461 , NET462 , NET47 , NET471 , NET472 |
.NET Standard | NETSTANDARD1_0 , NETSTANDARD1_1 , NETSTANDARD1_2 , NETSTANDARD1_3 NETSTANDARD1_4 , NETSTANDARD1_5 , NETSTANDARD1_6 , NETSTANDARD2_0 |
.NET Core | NETCOREAPP1_0 , NETCOREAPP1_1 , NETCOREAPP2_0 , NETCOREAPP2_1 |
其他預定義符號包括 DEBUG 和 TRACE 常量。 你可以使用 #define 替代項目的值集。 例如,會根據生成配置屬性(“調試”或者“發布”模式)自動設置 DEBUG 符號。
public class MyClass { static void Main() { #if NET40 WebClient _client = new WebClient(); #else HttpClient _client = new HttpClient(); #endif } //... }
C# 預處理指令