【发布时间】:2010-09-21 07:25:49
【问题描述】:
不知道有没有办法在运行时设置#define的值。
我假设在下面的代码中有针对特定于 Oracle 和特定于 Sql Server 的查询。
#define oracle
// ...
#if oracle
// some code
#else
// some different code.
#endif
【问题讨论】:
标签: c# c-preprocessor
不知道有没有办法在运行时设置#define的值。
我假设在下面的代码中有针对特定于 Oracle 和特定于 Sql Server 的查询。
#define oracle
// ...
#if oracle
// some code
#else
// some different code.
#endif
【问题讨论】:
标签: c# c-preprocessor
不,预处理器在编译之前运行并且可以在那个时候改变代码,这就是它的目的,如果你想在运行时根据某些东西切换行为,请使用变量和正常的条件逻辑。
【讨论】:
#if 是编译时。您可以在构建过程中指定它(通过切换到 msbuild/csc),但不是在运行时指定。排除的代码不存在。最好建议您 (1 of):
【讨论】:
绝对不是,#defines 是在编译器看到它之前由预处理器编译出来的——所以标记“oracle”甚至不在您的代码中,只是“1”或“0”。将#define 更改为全局变量或(更好)返回正确值的函数。
【讨论】: