if语句行为的一行说明?

时间:2012-02-09 17:33:07

标签: c# behavior

示例代码:

int hour = 0;
bool saveData = true;

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

在上面的代码中,saveData将始终设置为false,但doSomeMethod()不会被触发。我认为编译器在doSomeMethod()之后将分号视为移动到下一个语句的指示符,忽略它与if语句位于同一行。这种行为的原因是什么?

3 个答案:

答案 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; }

你的代码缺少括号使它成为前者,因此你的猜测是正确的。