一行if语句行为的解释

本文关键字:解释 if 语句 一行 | 更新日期: 2023-09-27 18:23:51

示例代码:

int hour = 0;
bool saveData = true;
if(hour > 0) doSomeMethod(); saveData = false;

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

一行if语句行为的解释

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

你的代码缺少大括号,所以你的猜测是正确的。