【问题标题】:Is there a way to set the value of #define on runtime?有没有办法在运行时设置#define 的值?
【发布时间】:2010-09-21 07:25:49
【问题描述】:

不知道有没有办法在运行时设置#define的值。

我假设在下面的代码中有针对特定于 Oracle 和特定于 Sql Server 的查询。

#define oracle

// ...    

#if oracle
// some code
#else
// some different code.
#endif

【问题讨论】:

    标签: c# c-preprocessor


    【解决方案1】:

    不,预处理器在编译之前运行并且可以在那个时候改变代码,这就是它的目的,如果你想在运行时根据某些东西切换行为,请使用变量和正常的条件逻辑。

    【讨论】:

      【解决方案2】:

      #if 是编译时。您可以在构建过程中指定它(通过切换到 msbuild/csc),但不是在运行时指定。排除的代码不存在。最好建议您 (1 of):

      • 使用依赖注入/IoC 为每个后端提供单独的 DAL 堆栈
      • 使用支持两者的 ORM 工具
      • 基于提供者的代码分支(在单个 DAL 中)

      【讨论】:

        【解决方案3】:

        绝对不是,#defines 是在编译器看到它之前由预处理器编译出来的——所以标记“oracle”甚至不在您的代码中,只是“1”或“0”。将#define 更改为全局变量或(更好)返回正确值的函数。

        【讨论】:

          猜你喜欢
          • 2011-03-19
          • 1970-01-01
          • 1970-01-01
          • 2011-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-17
          • 1970-01-01
          相关资源
          最近更新 更多