示例代码:
int hour = 0;
bool saveData = true;
if(hour > 0) doSomeMethod(); saveData = false;
在上面的代码中,saveData将始终设置为false,但doSomeMethod()不会被触发。我认为编译器在doSomeMethod()之后将分号视为移动到下一个语句的指示符,忽略它与if语句位于同一行。这种行为的原因是什么?
答案 0 :(得分:6)
if
语句可以包含单个语句或代码块。一旦编译器找到;
,它就会结束if
。
上面的代码相当于:
if (hour > 0)
doSomeMethod();
saveData = false;
你想要的是:
if (hour > 0)
{
doSomeMethod();
saveData = false;
}
或:
if (hour > 0) { doSomeMethod(); saveData = false; }
答案 1 :(得分:4)
C#忽略换行符,就像C及其他后代一样,并使用;
来分隔语句。
您的代码完全等同于
int hour = 0;
bool saveData = true;
if(hour > 0)
doSomeMethod();
saveData = false;
顺便说一句,这是更好的风格。
答案 2 :(得分:1)
在C#中,if语句可以是:
if(expression) statement;
或
if(expression) { statement1; ... statementN; }
你的代码缺少括号使它成为前者,因此你的猜测是正确的。