Подтвердить что ты не робот

Делать else если утверждения существуют в С#?

Я встретил следующий код на С#.

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 во втором примере?

4b9b3361

Ответ 1

Вы правы; в С# нет такой вещи, как "else if". Это просто другое, где утверждение альтернативного предложения само является выражением if.

Конечно, IDE рассматривает "else if" как особый, чтобы вы получили хорошее форматирование, которое вы ожидаете.

Обратите внимание, что в синтаксисе "препроцессор" есть конструктор #elif.

Обратите внимание также, что C, С++ и ECMAScript - и я уверен, что еще много C-подобных языков - также обладают свойством, что формального оператора else else нет. Скорее, в каждом поведении выпадает из определения "else" как идущее перед одним утверждением.

Ответ 2

Это многоуровневое if-else.

Причина, по которой это связано с правилами синтаксиса С#. За else следует инструкция, и любая цепочка if квалифицируется как инструкция.

Ответ 3

Конструкция else if никогда не упоминается в спецификации С#, за исключением некоторых примеров, где она используется без объяснений. Поэтому я не думаю, что это специальная конструкция, она просто вложена в операторы.

Ответ 4

В С# нет инструкции "else if".

В этом отношении я не знаю, что в С# есть ключевые слова с несколькими словами.

Ответ 5

Вы правы. Это просто else, за которым следует if.

Ответ 6

Чтобы расширить на @hunter ответ на причину, когда вы нажмете на него, что без скобок он выполнит только следующую строку, если это будет куча вложенных else, нужны скобки:

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

Ответ 7

Заявление о выборе спецификации языка С# показывает только выражения if и switch. Если вы выберете оператор if, он говорит:

Оператор if выбирает оператор для выполнения на основе значения булевого выражения.

если-выражение:

if (boolean-expression) embedded-statement

if (boolean-expression) embedded-statement else embedded-statement логическое выражение: Выражение

Другая часть связана с лексически ближайшим предыдущим, если это разрешено синтаксисом

Ответ 8

Два приведенных вами примера эквивалентны на каждом языке. В C или С# это точно эквивалентно else, тогда if. В некоторых других языках elseif является синтаксическим сахаром для другого, тогда if. Поэтому независимо от того, какой язык вы используете, они будут компилироваться в один и тот же код (или интерпретироваться по тому же поведению). См. http://en.wikipedia.org/wiki/Conditional_%28programming%29#Else_If