C# 预处理器指令学习笔记

概述

预处理器指令是指在编译阶段处理源代码之前,先由预处理器进行处理的指令。这些指令通常以 # 开头,常用于定义常量、条件编译和引用程序集等。

常用预处理器指令

#define

#define 指令用于定义一个常量。当编译器遇到后续代码中使用该常量的地方,会直接将其替换为定义的值。

csharpCopy Code
#define DEBUG #if DEBUG Console.WriteLine("调试模式"); #endif

#if, #else, #elif, #endif

#if 指令可以根据条件编译判断代码块是否需要编译。 #else#elif 用于在条件不满足时执行的操作。 #endif 用于结束条件编译代码块。

csharpCopy Code
#define DEBUG #if DEBUG Console.WriteLine("调试模式"); #else Console.WriteLine("发布模式"); #endif

#warning, #error

#warning 指令用于发出警告消息,#error 指令用于发出错误消息。

csharpCopy Code
#warning 这是警告信息 #error 这是错误信息

#region, #endregion

#region#endregion 用于分组代码片段,方便代码的折叠和展开。

csharpCopy Code
#region 常量定义 public const int MaxValue = 100; public const int MinValue = 0; #endregion

#nullable enable, #nullable disable

#nullable enable#nullable disable 用于启用或禁用 C# 8.0 引入的可空引用类型特性。

csharpCopy Code
#nullable enable string? str1 = null; string str2 = "hello"; Console.WriteLine(str1.Length); // 编译错误 Console.WriteLine(str2.Length); // 正确 #nullable disable

实例

csharpCopy Code
#define DEBUG using System; class Program { static void Main(string[] args) { #if DEBUG Console.WriteLine("调试模式"); #else Console.WriteLine("发布模式"); #endif #warning 这是警告信息 #region 常量定义 public const int MaxValue = 100; public const int MinValue = 0; #endregion #nullable enable string? str1 = null; string str2 = "hello"; Console.WriteLine(str1.Length); // 编译错误 Console.WriteLine(str2.Length); // 正确 #nullable disable } }