if语句行为的一行说明?

Mr.*_*ith 0 c# behavior

示例代码:

int hour = 0;
bool saveData = true;

if(hour > 0) doSomeMethod(); saveData = false;
Run Code Online (Sandbox Code Playgroud)

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

Rya*_*n P 6

一个if语句可以包含一个单一的语句,或代码块.一旦编译器发现;它结束了if.

您上面的代码相当于:

if (hour > 0)
    doSomeMethod();
saveData = false;
Run Code Online (Sandbox Code Playgroud)

你想要的是:

if (hour > 0)
{
    doSomeMethod();
    saveData = false;
}
Run Code Online (Sandbox Code Playgroud)

要么:

if (hour > 0) { doSomeMethod(); saveData = false; }
Run Code Online (Sandbox Code Playgroud)

  • @ Mr.Smith:不,"if"语句可以包含*单个语句*,句点.**代码块*是*单个语句.**(请注意,单个语句可能不是带标签的语句或本地声明语句.) (5认同)