Объяснение для одной строки, если поведение оператора? - PullRequest
0 голосов
/ 09 февраля 2012

Пример кода:

int hour = 0;
bool saveData = true;

if(hour > 0) doSomeMethod(); saveData = false;

В приведенном выше коде saveData всегда будет иметь значение false, но doSomeMethod () не будет запущен.Я понял, что компилятор обрабатывает точку с запятой после doSomeMethod () как индикатор для перехода к следующему оператору, игнорируя тот факт, что он находится на той же строке, что и оператор if.В чем причина такого поведения?

Ответы [ 3 ]

6 голосов
/ 09 февраля 2012

Оператор if может содержать либо один оператор, либо блок кода.Как только компилятор находит ;, он завершает if.

Ваш код выше эквивалентен:

if (hour > 0)
    doSomeMethod();
saveData = false;

Что вы хотите:

if (hour > 0)
{
    doSomeMethod();
    saveData = false;
}

или:

if (hour > 0) { doSomeMethod(); saveData = false; }
4 голосов
/ 09 февраля 2012

C # игнорирует символы новой строки, так же как C и другие его потомки, и использует ; для разделения операторов. Ваш код полностью эквивалентен

int hour = 0;
bool saveData = true;

if(hour > 0)
    doSomeMethod();
saveData = false;

который, кстати, лучший стиль.

1 голос
/ 09 февраля 2012

В C # оператор if может быть либо:

if(expression) statement;

, либо

if(expression) { statement1; ... statementN; }

Отсутствие скобок в коде делает его первым, поэтому ваше предположение верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...