if语句中的常量条件

Aci*_*dic 1 c#

有时我发现预处理器指令对我的应用程序来说不够灵活,所以我一直在想是否可以交换#if预处理器的功能.

例:

const bool Debug = false;
if (Debug)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

编译器会删除if语句及其内容吗?或者,如果Debug常量的值是true,编译器是否会删除条件检查并保留内容?

Eri*_*ert 11

编译器会删除if语句及其内容吗?或者,如果Debug常量的值为true,编译器是否会删除条件检查并保留内容?

是的,是的.但是,这些是实现细节,而不是语言的保证.

if(false)用于控制条件编译的一些有趣方面:

编辑是不是条件可言; 的身体if会被编译,就像任何其他代码.如果它包含语法错误,您将收到语法错误.如果它包含重载解析错误,您将获得重载解析错误."转到使用",其他IDE功能继续工作.

这与控制非常不同#if false; 由于预处理程序而被省略的文本被视为注释."转到用法"将找不到有条件编译的用法,您不会获得语法着色,等等.但是,代码可以完全破解,因为毕竟它基本上只是一个注释.

然而,第一点是轻微的谎言; 有一点不同.if(false)不检查内部代码是否有明确的分配错误:

int x;
if (false)
    Console.WriteLine(x); // no error!
Run Code Online (Sandbox Code Playgroud)

因为毕竟,在用这个程序片段写入之前,没有办法读取x!