我在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
格式不同?
答案 0 :(得分:76)
你是对的;在C#中没有“else if”语句这样的东西。它只是一个其他地方,替代条款的陈述本身就是一个if语句。
当然, IDE 将“else if”视为特殊,以便您获得您期望的漂亮格式。
请注意,“预处理器”语法中的是 #elif
构造。
另请注意,C,C ++和ECMAScript - 我相信更多类似C语言 - 也具有没有正式“else if”语句的属性。相反,在每一个行为都落在“其他”的定义之外,就像在单个陈述之前一样。
答案 1 :(得分:3)
这是一个多层的if-else。
它与c#语法规则有关的原因。 else
之后是一个语句,任何if
链都有资格作为声明。
答案 2 :(得分:3)
else if
中从未提及构造{{1}},除非在某些示例中使用它而没有解释。所以我不认为它是一个特殊的构造,它只是嵌套if语句。
答案 3 :(得分:2)
C#中没有“else if”语句。
就此而言,我不知道C#中有任何多词语句关键字。
答案 4 :(得分:2)
你是对的。它只是else
后跟if
。
答案 5 :(得分:1)
为了扩展@ hunter的回答原因,当你点击它时没有括号它只会执行下一行,如果它是一堆嵌套,否则需要括号:
if(condition0)
statement0;
else
{
if(condition1)
statement1;
else
{
if(condition2)
statement2;
else
{
if(condition3)
statement3;
else
...
}
}
}
答案 6 :(得分:1)
C#语言规范的Selection Statement仅显示if
和switch
语句。如果您选择if
语句,则会显示:
if语句根据布尔表达式的值选择要执行的语句。
if语句:
if(boolean-expression)embedded-statement
if(boolean-expression)embedded-statement else embedded-statement 布尔表达式: 表达
如果语法
允许,则else部分与词法上最接近的前一部分相关联
答案 7 :(得分:1)
您提供的两个示例在每种语言中都是等效的。在C或C#中,它完全等同于else,然后if。在其他一些语言中,elseif是else的语法糖,然后是if。因此,无论您使用哪种语言,它们都会编译为相同的代码(或者被解释为相同的行为)。见http://en.wikipedia.org/wiki/Conditional_%28programming%29#Else_If