【问题标题】:#if, #else, #endif in C# source codeC#源代码中的#if、#else、#endif
【发布时间】:2011-06-14 00:35:16
【问题描述】:

我从 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 是什么?变量?

【问题讨论】:

  • 正如其他答案所述,这些在 .Net 4.0 中并不是新的,您可能需要知道它们自 C++ 时代以来就存在。
  • 他是说自 C/C++ 以来就存在预处理指令,而不是 C# 基于 C++。
  • @Joey,@yodaj007 说的是对的,我不是说遗产。
  • C# 4 规范第 2.5 节回答了您的问题;当您对语言有疑问时,我鼓励您阅读它。
  • @Joey,你正在移动球门柱。这里没有人说他们是一样的。停止尝试开始争论。

标签: c# c-preprocessor


【解决方案1】:

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

为了定义一个变量,您可以使用/define 编译器选项或使用Visual 中项目属性的构建 选项卡中的条件编译符号工作室:

【讨论】:

    【解决方案2】:

    这些不是 Framework 4 的新功能

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

    #Define something
    

    然后

    #if something
    

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

    【讨论】:

      猜你喜欢
      • 2014-10-04
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多