1. 程式人生 > >C# 預處理指令

C# 預處理指令

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# 預處理指令