C#源代码中的#if,#else,#endif

ozs*_*gal 4 c# c-preprocessor

我从MSDN获得了一个示例代码,我发现了以前从未见过的代码语法:

namespace Mvc3RemoteVal.Controllers 
{
        public class HomeController : Controller
        {
            IUserDB _repository;

#if  InMemDB
            public HomeController() : this(InMemoryDB.Instance) { }
#else
            public HomeController() : this(new EF_UserRepository()) { }
#endif


            public HomeController(IUserDB repository) 
            {
                _repository = repository;
            }

            [...]
        }
Run Code Online (Sandbox Code Playgroud)

那些是什么#if,#else,#endif

什么是#if InMemDB

什么是InMemDB?一个变量?

Dar*_*rov 14

这些被称为预处理器指令,并且自.NET 1.0以来就存在.它们允许您定义不同的编译指令,InMemDB如果已定义此变量,编译器将评估或不评估块.#if指令的文档提供了更深入的概述.

为了确定您可以使用一个变量/定义编译器选项或使用条件编译符号构建在Visual Studio项目的属性选项卡:

替代文字