【发布时间】:2010-07-30 19:57:19
【问题描述】:
我在 C# 中遇到过以下代码。
if(condition0) statement0;
else if(condition1) statement1;
else if(condition2) statement2;
else if(condition3) statement3;
...
else if(conditionN) statementN;
else lastStatement;
我的一些同事告诉我这是else if 声明。但是,我确信它实际上是一个多层嵌套的if-else 语句。我知道没有分隔符{},if 或else 中允许有一个语句。所以在这种情况下,我认为它相当于下面的代码。
if(condition0)
statement0;
else
if(condition1)
statement1;
else
if(condition2)
statement2;
else
if(condition3)
statement3;
else
...
请注意,我更改的只是空格。
此缩进有效,因为当没有分隔符时,每个 else 都会返回到最近的 if 语句。
谁能澄清编译器对第一个示例中的else if 格式的处理方式是否与第二个示例中的嵌套if-else 格式不同?
【问题讨论】:
-
看起来是
switch的好案例:) -
Language spec 在短时间内清除它。你是对的,但是当它根本没有任何实际区别时,这似乎有点像一个肚脐凝视的论点:)
-
可惜C#没有C++这样的宏;我对这个困境的典型解决方案是执行
#define fandango else if,然后我继续编写我的 if-fandango-else 语句。巧妙地避免了“else-if”的整个问题,并且代码更具可读性。每个人都知道 fandango 语句,因为他们所要做的就是 grep 头文件以找到定义,以便阅读我与之关联的注释:“// fandango:替换“else if”构造”。很明显,我只关心有用的 cmets。 -
请注意,if-else-if-else-if-else-if... 会导致严重嵌套的范围,至少在某些编译器上是这样。我知道在 C++ 中,我设法用一个有几百个 else-if 的(笑话)程序触发了嵌套编译器错误。如果您使用了足够多的 else-if 来遇到问题,那么您可能会遇到更大的问题。
标签: c# .net if-statement