在C#中是否存在if语句?

时间:2010-07-30 19:57:19

标签: c# .net if-statement

我在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语句。我知道如果没有分隔符{},则ifelse中允许使用一条语句。所以在这种情况下,我认为它将等同于以下代码。

if(condition0) 
  statement0;
else
  if(condition1)
    statement1;
  else
    if(condition2)
      statement2;
    else
      if(condition3)
        statement3;
      else
      ...

请注意,我改变的只是空白。 此缩进有效,因为当没有分隔符时,每个else都会返回到最新的if语句。

有人可以澄清编译器中第一个示例中的else if格式是否与第二个示例中的嵌套if-else格式不同?

8 个答案:

答案 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仅显示ifswitch语句。如果您选择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