Do else if statements exist in C#?

C#.NetIf Statement

C# Problem Overview


I have come across the following code in C#.

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

Some of my colleagues tell me that this is an else if statement. However, I am convinced that it is actually a multi-layered nested if-else statement. I know that without delimiters {}, one statement is allowed in an if or else. So in this case I think it would be equivalent to the following code.

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

Note that all I changed was the whitespace. This indentation works because each else goes back to the most recent if statement when there are no delimiters.

Can anyone clarify if the else if format in the first example is treated differently by the compiler than the nested if-else format in the second example?

C# Solutions


Solution 1 - C#

You are correct; there is no such thing as an "else if" statement in C#. It's just an else where the statement of the alternative clause is itself an if statement.

Of course, the IDE treats "else if" as special so that you get the nice formatting you'd expect.

Note that there is an #elif construct in the "preprocessor" syntax.

Note also that C, C++ and ECMAScript - and I am sure many more C-like languages - also have the property that there is no formal "else if" statement. Rather, in each the behaviour falls out of the definition of "else" as coming before a single statement.

Solution 2 - C#

It's a multi-layered if-else.

The reason it is has to do with c# syntax rules. An else is followed by a statement, and any if chain qualifies as a statement.

Solution 3 - C#

The construct else if is never mentioned in the C# specification, except in some examples where it is used without explanation. So I do not think it is a special construct, it is just nested if statements.

Solution 4 - C#

You are correct. It's just an else followed by an if.

Solution 5 - C#

There is no "else if" statement in C#.

For that matter, I don't know that there are any multi-word statement keywords in C#.

Solution 6 - C#

The http://msdn.microsoft.com/en-us/library/aa664745(v=VS.71).aspx">Selection Statement of the C# Language Specification only shows if and switch statements. If you select the if statement, it says:

> The if statement selects a statement for execution based on the value of a Boolean expression.

> if-statement: > if ( boolean-expression ) embedded-statement > if ( boolean-expression ) embedded-statement else embedded-statement boolean-expression: expression

> An else part is associated with the lexically nearest preceding if that is allowed by the syntax

Solution 7 - C#

The two examples you give are equivalent in every language. In C or C#, it's exactly equivalent to an else, then if. In some other languages, elseif is syntactic sugar for else, then if. So no matter which language you use, they will compile to the same code (or be interpreted to the same behavior). See http://en.wikipedia.org/wiki/Conditional_%28programming%29#Else_If

Solution 8 - C#

To expand on @hunter's answer the reason, as you hit on it that without brackets it will only execute the next line, if it were a bunch of nested the else would need brackets:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAviv B.View Question on Stackoverflow
Solution 1 - C#Eric LippertView Answer on Stackoverflow
Solution 2 - C#Robert HarveyView Answer on Stackoverflow
Solution 3 - C#Mark ByersView Answer on Stackoverflow
Solution 4 - C#James CurranView Answer on Stackoverflow
Solution 5 - C#John SaundersView Answer on Stackoverflow
Solution 6 - C#SwDevMan81View Answer on Stackoverflow
Solution 7 - C#Tegan MulhollandView Answer on Stackoverflow
Solution 8 - C#Dustin LaineView Answer on Stackoverflow