Еще, если операторы существуют в 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 формат во втором примере?

49
задан John Saunders 28 August 2010 в 16:39
поделиться

8 ответов

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

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

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

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

78
ответ дан 7 November 2019 в 11:40
поделиться

Это многослойное if-else.

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

4
ответ дан 7 November 2019 в 11:40
поделиться

В C # нет оператора else if.

Если на то пошло, я не знаю, есть ли какие-либо ключевые слова операторов из нескольких слов в C #.

2
ответ дан 7 November 2019 в 11:40
поделиться

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

1
ответ дан 7 November 2019 в 11:40
поделиться

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

4
ответ дан 7 November 2019 в 11:40
поделиться

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

3
ответ дан 7 November 2019 в 11:40
поделиться

В Утверждении выбора спецификации языка C# показаны только утверждения if и switch. Если выбрать оператор if, то будет написано:

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

if-statement:

if ( boolean-expression ) embedded-statement

if ( boolean-expression ) embedded-statement else embedded-statement булево выражение: выражение

Часть else связана с лексически ближайшим предшествующим if, что допускается синтаксисом

1
ответ дан 7 November 2019 в 11:40
поделиться

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

if(condition0) 
  statement0;
else
{
  if(condition1)
    statement1;
  else
  {
    if(condition2)
      statement2;
    else
    {
      if(condition3)
        statement3;
      else
      ...
    }
  }
}
1
ответ дан 7 November 2019 в 11:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: