當C#編譯器找到一條預處理指令#if,最後找到一條指令時,#endif僅在定義了指定符號的狀況下,編譯器纔會在這些指令之間編譯代碼。與C和C ++不一樣,您不能將數字值分配給符號。#if C#中的語句爲布爾型,僅測試符號是否已定義。html
條件編譯(編譯器會根據不一樣配置環境來執行):post
#if DEBUG Console.WriteLine("我是debug 模式!"); #elif RELEASE Console.WriteLine("我是relsease 模式!"); #else Console.WriteLine("我是自定義模式!"); #endif Console.WriteLine("我是沒有被任何預處理過得輸出!");
當前解決方案編譯環境爲Debug測試
輸出結果:spa
經常使用指令符:debug
舉例:咱們須要兩個版本的代碼,基礎版、更多功能的企業版本。此時咱們就能夠經過自定義指令符來知足定製化功能。code
也能夠經過屬性的方式來執行方法htm
VS站點-》右鍵-》屬性-》生成-》常規blog
定義生效後,經過csproj工程文件咱們能夠看到有兩條PropertyGroup對應不一樣的Conditionget
定義指令符區域編譯器
你還能夠使用如下兩個預處理程序指令定義能夠摺疊在大綱中的代碼區域:
#region MyClass definition public class MyClass { static void Main() { } } #endregion
參考連接
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/preprocessor-directives
https://blog.walterlv.com/post/how-to-define-preprocessor-symbols.html