Есть ли еще, если заявления существуют в C #? - PullRequest
48 голосов
/ 30 июля 2010

Я встречал следующий код на 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 формат во втором примере?

Ответы [ 8 ]

77 голосов
/ 31 июля 2010

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

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

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

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

4 голосов
/ 31 июля 2010

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

4 голосов
/ 31 июля 2010

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

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

3 голосов
/ 31 июля 2010

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

2 голосов
/ 31 июля 2010

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

Впрочем, я не знаю, что в C # есть любые ключевые слова с несколькими словами.

1 голос
/ 31 июля 2010

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

1 голос
/ 31 июля 2010

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

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

если-заявление:

if (логическое выражение) встроенный оператор

if (логическое выражение) встроенный оператор, еще встроенный оператор логическое выражение: выражение

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

1 голос
/ 31 июля 2010

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

if(condition0) 
  statement0;
else
{
  if(condition1)
    statement1;
  else
  {
    if(condition2)
      statement2;
    else
    {
      if(condition3)
        statement3;
      else
      ...
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...