概念:指令指导编译器在实际编译开始之前对信息进行预处理。
1.#if、#elif、#else、#endif
#define Edition_1_1//它用于定义一系列成为符号的字符。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApp1 { class Program { static void Main(string[] args) { #if (Edition_1_1)// 它用于测试符号是否为真。 Console.WriteLine("是我版本1_1"); #else// 它用于创建复合条件指令,与 #if 一起使用。 Console.WriteLine("我是其他的版本,不执行!"); #endif//指定一个条件指令的结束。 Console.ReadKey(); } } }
输出:是我版本1_1
优点:当我们代码有多个版本,其它版本的代码不想注释,有可能又要重用,#define Edition_1_1 就可以改变值,运行其他版本,例如:#define Edition_1_2 改成版本1_2,上面输出的是:Console.WriteLine("我是其他的版本,不执行!");
2.#warning、#error
#define Bug using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApp1 { class Program { static void Main(string[] args) { #if Bug #error "我这段代码写的有bug,注意一下!" #endif #warning "这个文件,方法有多个地方在重用,改的时候请注意一下!" Console.ReadKey(); } } }
生成结果:
优点:在我们实际的项目中,一个解决方案存在多个人去修改,我们加一些告警和错误,可以提醒下一个同事,有哪些地点需要注意!
3.#region 和#endregion
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApp1 { class Program { static void Main(string[] args) { #region 床位费 Console.WriteLine($"我的床位是:50元"); #endregion #region 餐费 Console.WriteLine($"我的餐费是:100元"); #endregion #region 护理费 Console.WriteLine($"我的护理费是:150元"); #endregion Console.ReadKey(); } } }
代码折叠效果:
优点:可以把一些业务相同的代码,折叠放在一起,提高了代码的可阅读性。
4.#line
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApp1 { class Program { static void Main(string[] args) { #line 1 "我在Program.cs" // 行1 try // 行2 {// 行3 int i = int.Parse("模拟报错!");// 行4 Console.WriteLine("我运行了!");// 行5 } catch(Exception ex) { Console.WriteLine("错误!"+ex.ToString()); } #line default // 恢复默认行号 Console.ReadKey(); } } }
输出:
、