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

时间:2011-01-23 13:10:34

标签: 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;
            }

            [...]
        }

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

什么是#if InMemDB

什么是InMemDB?变量?

2 个答案:

答案 0 :(得分:14)

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

为了定义变量,您可以使用/define编译器选项或使用项目属性的 Build 选项卡中的条件编译符号在Visual Studio中:

alt text

答案 1 :(得分:1)

这些不是Framework 4的新功能

这是您可以用于开发阶段和测试的功能: 你可以声明:

#Define something

然后

#if something

将执行“if”中的所有代码。 所有不是的代码,不会。