如果语句存在于C#中吗?
我在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”语句。这只是另一方面,替代条款的陈述本身就是一种陈述。
当然,IDE将“else if”视为特别的,以便获得您期望的良好格式。
请注意,是和#elif
在“预处理器”语法中的构造。
还要注意,C,C++和ECMAScript--我相信还有更多的类C语言 - 也有没有正式的“else if”语句的属性。相反,在每一个行为都落在“其他”的定义之前,就像在一个陈述之前。
这是一个多层次的if-else。
它的原因与c#语法规则有关。一个else
后跟一个声明,并且任何if
链都有资格作为声明。
C#中没有“else if”语句。
对于这个问题,我不知道在C#中有任何多词语句关键字。
收益率回报。产量突破。 – 2010-07-30 20:03:02
嗯,这就是说'foreach..in'是一个多词关键字,尽管分开了一点。 – 2010-07-30 20:03:50
'yield return'将是一个多词语句关键字。就像'foreach(... in ...)'一样,这取决于你想解释这个短语的松散程度。 – cHao 2010-07-30 20:05:44
你是对的。这只是一个else
,然后是if
。
在C# specification中从未提及构造else if
,除了在一些没有解释的情况下使用它的例子。所以我不认为它是一个特殊的构造,它只是嵌套的if语句。
它也没有在关键字表中列出(第2.4.3节),它是什么构成关键词标记的正式定义。这对我来说已经足够了,但要进一步说明:关键字被描述为“类似标识符的字符序列”;标识符的规范不允许使用空格字符。由于“else if”至少包含一个空格字符,所以我会说它不是“一个类似标识符的字符序列”。 – 2010-07-30 21:20:40
@Dr。 Wily:同样的方式,“yield return”不是根据规范的关键字。但它仍然有意义。 – configurator 2011-03-23 01:58:10
要在@猎人的答案扩大的原因,因为你打就可以了,如果没有括号只会执行下一行,如果它是一堆嵌套的人会需要括号:
if(condition0)
statement0;
else
{
if(condition1)
statement1;
else
{
if(condition2)
statement2;
else
{
if(condition3)
statement3;
else
...
}
}
}
向解释方括号的方向投票,这是他认为正在发生的事情? – 2010-07-30 20:16:26
问题是,如果*是一个嵌套的if-else结构,并且实际上并不需要方括号(并不是说如果实际用新行+缩进样式编写的话,它们不会被鼓励)。括号不是*行*,它们是关于*语句*的。在这种情况下,声明是另一个* if *。 – 2010-07-30 20:19:14
完全同意,我更明确地说出他原来的想法是不正确的,如果他认为这需要我写的。 – 2010-07-30 20:42:48
的C#语言规范的Selection Statement仅显示if
和switch
语句。如果您选择if
语句,它会显示:
if语句根据布尔表达式的值选择要执行的语句。
if语句:
如果(布尔表达式)嵌入语句
如果(布尔表达式)嵌入语句别的嵌入语句 布尔表达式: 表达
的否则部分与词汇上最接近的前面相关(如果语法允许的话)
这两个例子你给的每种语言都是相同的。在C或C#中,它完全等价于一个else,那么if。在其他一些语言中,elseif是语法糖,否则,if。因此,无论您使用哪种语言,它们都会编译为相同的代码(或者解释为相同的行为)。请参阅http://en.wikipedia.org/wiki/Conditional_%28programming%29#Else_If
通常,“else if”被编译器/解释器视为两个单独的语句。带有“else if”结构的语言通常使用单个单词,如elseif或elif。 – 2010-07-30 20:10:47
看起来像'switch'的好例子:) – 2010-07-30 20:00:12
@Russ ha!好双关! – NickAldwin 2010-07-30 20:00:39
[语言规范](http://msdn.microsoft.com/en-us/vcsharp/aa336809.aspx)会在短时间内清除它。你是对的,但它看起来有点像一个肚脐眼,但它根本没有实际意义:) – shambulator 2010-07-30 20:12:40