还有,如果语句存在于C#中?
我在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
格式?
你是对的; 在C#中不存在“else if”语句。 这只是一个别的地方,这个替代条款的陈述本身就是一个if语句。
当然, IDE将“else if”视为特别的,这样你就可以获得所期望的良好格式。
请注意,“预处理器”语法中有一个#elif
构造。
还要注意,C,C ++和ECMAScript–我相信还有更多的类C语言 – 也有一个属性,就是没有正式的“else if”语句。 相反,在每一个行为都落在“其他”的定义之前,就像是在一个陈述之前。
这是一个多层次的if-else。
它的原因是与C#语法规则有关。 else
是后面跟着一个声明,任何if
链条限定为一个声明。
else if
构造else if
在C#规范中从未提及,除非在一些使用它的例子中没有解释。 所以我不认为这是一个特殊的构造,它只是嵌套的if语句。
在C#中没有“else if”语句。
对于这个问题,我不知道在C#中有任何多词语句关键字。
你是对的。 这只是一个后跟一个if
。
要扩大@ hunter的答案的理由,当你点击它,没有括号,它将只执行下一行,如果它是一堆嵌套的其他需要括号:
if(condition0) statement0; else { if(condition1) statement1; else { if(condition2) statement2; else { if(condition3) statement3; else ... } } }
C#语言规范的select语句只显示if
和switch
语句。 如果你selectif
语句,它会说:
if语句根据布尔expression式的值select要执行的语句。
if语句:
if(boolean-expression)embedded语句
if(boolean-expression)embedded-statement elseembedded语句布尔expression式:expression式
如果语法允许的话,else部分与词汇上最接近的前面相关联
你给的两个例子在每种语言中都是相同的。 在C或C#中,它完全等价于一个else,那么if。 在其他一些语言中,elseif是语法糖,否则,if。 所以无论你使用哪种语言,他们都会编译成相同的代码(或者解释为相同的行为)。 请参阅http://en.wikipedia.org/wiki/Conditional_%28programming%29#Else_If