Visual Studio - C# 前置處理器指示詞#if

04 July 2013 — Written by Sky Chang
#C##Visual Studio

最近看朋友用Visual Studio,發現了一個有趣的東西,那就是他在Code裡面埋了#if這類的敘述如下…( 好啦,小弟知識淺薄… )

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
#if Test1
            return Content("1");
#else
            return Content("2");
#endif            
        }

    }
}

其實這個東西叫做C# 前置處理器指示詞( 官方是這樣稱呼的… ),這個用途其實滿有趣的,它可以讓編譯器,依據你的設定,來決定,當下要編譯那些東西。

以上面的Code為例,大家應該就很清楚,猜也可以猜得出來,就是當為Test1時,就會編譯return Content(“1”) ( 歹勢,這邊用ASP.NET MVC為範例~ ),如果不是Test1的話,那就會編譯成return Content(“2”)。

那Test1又代表甚麼呢??,大家其實可以從專案總管的這邊看到有一個"條件式編譯的符號",而這邊,就是可以填入我們在Code那邊設定的值。

image

所以如果是上面的ASP.NET MVC程式碼,我們再在專案這邊設定好後,如上圖,那我們執行出來的結果就會如下圖。而不是retunr Content(“2”)。

image

通常這個功能,會常用在Debug的設定、或是某些情況下的切換,老實說,小弟以前真的還沒碰過,所以這邊野人獻曝一下XDD,也順便紀錄一下,讓自己加深印象=V=

最後,如果有興趣的人,MSDN那邊也提供了更多的寫法可以給大家參考喔!!

( 好啦,我就是菜…完全沒發現已經快要十年前的東西- - )

參考資料

Sky & Study4.TW