Объяснение для одной строки, если поведение оператора?
Пример кода:
int hour = 0;
bool saveData = true;
if(hour > 0) doSomeMethod(); saveData = false;
В приведенном выше коде saveData всегда будет иметь значение false, но doSomeMethod() не будет запущен. Я подумал, что компилятор обрабатывает точку с запятой после doSomeMethod() как индикатор для перехода к следующему оператору, игнорируя тот факт, что он находится на той же строке, что и оператор if. В чем причина такого поведения?
3 ответа
if
оператор может содержать либо один оператор, либо блок кода. Как только компилятор найдет ;
это заканчивается if
,
Ваш код выше эквивалентен:
if (hour > 0)
doSomeMethod();
saveData = false;
То, что вы хотите, это:
if (hour > 0)
{
doSomeMethod();
saveData = false;
}
или же:
if (hour > 0) { doSomeMethod(); saveData = false; }
C# игнорирует символы новой строки, так же как C и другие его потомки, и использует ;
отдельные заявления. Ваш код полностью эквивалентен
int hour = 0;
bool saveData = true;
if(hour > 0)
doSomeMethod();
saveData = false;
кстати, лучший стиль.
В C# оператор if может быть:
if(expression) statement;
или же
if(expression) { statement1; ... statementN; }
Отсутствие скобок в коде делает его первым, поэтому ваше предположение верно.