示例代碼:一行if語句行爲的解釋?
int hour = 0;
bool saveData = true;
if(hour > 0) doSomeMethod(); saveData = false;
在上面的代碼,SAVEDATA將總是被設置爲假,還doSomeMethod()將不會被觸發。我認爲編譯器將doSomeMethod()之後的分號作爲指示符移動到下一個語句,忽略它與if語句位於同一行。這種行爲的原因是什麼?
示例代碼:一行if語句行爲的解釋?
int hour = 0;
bool saveData = true;
if(hour > 0) doSomeMethod(); saveData = false;
在上面的代碼,SAVEDATA將總是被設置爲假,還doSomeMethod()將不會被觸發。我認爲編譯器將doSomeMethod()之後的分號作爲指示符移動到下一個語句,忽略它與if語句位於同一行。這種行爲的原因是什麼?
if
語句可以包含單個語句或代碼塊。一旦編譯器發現;
它結束if
。
你上面的代碼等價於:
if (hour > 0)
doSomeMethod();
saveData = false;
你想要的是:
if (hour > 0)
{
doSomeMethod();
saveData = false;
}
或:
if (hour > 0) { doSomeMethod(); saveData = false; }
這就是我正在尋找的答案,換句話說:if語句可以包含SINGLE語句或代碼塊。 – 2012-02-09 17:43:20
@ Mr.Smith:不,「if」語句可以包含*單個語句*,句點。 **代碼塊*是*單個語句**(請注意,單個語句可能不是標記語句或本地聲明語句。) – 2012-02-09 18:11:02
C#忽略換行,就像C和它的其他後代,並使用;
分隔報表。 你的代碼是完全等同於
int hour = 0;
bool saveData = true;
if(hour > 0)
doSomeMethod();
saveData = false;
,這是更好的風格,順便說一句。
在C#中的if語句可以是:
if(expression) statement;
或
if(expression) { statement1; ... statementN; }
你的代碼缺少括號使其成爲前者,因此,你的猜測是正確的。
這就是爲什麼總是用代碼塊包裝if語句總是更好的{} – MethodMan 2012-02-09 17:37:36