2012-02-09 71 views
0

示例代碼:一行if語句行爲的解釋?

int hour = 0; 
bool saveData = true; 

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

在上面的代碼,SAVEDATA將總是被設置爲假,還doSomeMethod()將不會被觸發。我認爲編譯器將doSomeMethod()之後的分號作爲指示符移動到下一個語句,忽略它與if語句位於同一行。這種行爲的原因是什麼?

+1

這就是爲什麼總是用代碼塊包裝if語句總是更好的{} – MethodMan 2012-02-09 17:37:36

回答

6

if語句可以包含單個語句或代碼塊。一旦編譯器發現;它結束if

你上面的代碼等價於:

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

你想要的是:

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

或:

if (hour > 0) { doSomeMethod(); saveData = false; } 
+0

這就是我正在尋找的答案,換句話說:if語句可以包含SINGLE語句或代碼塊。 – 2012-02-09 17:43:20

+5

@ Mr.Smith:不,「if」語句可以包含*單個語句*,句點。 **代碼塊*是*單個語句**(請注意,單個語句可能不是標記語句或本地聲明語句。) – 2012-02-09 18:11:02

4

C#忽略換行,就像C和它的其他後代,並使用;分隔報表。 你的代碼是完全等同於

int hour = 0; 
bool saveData = true; 

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

,這是更好的風格,順便說一句。

1

在C#中的if語句可以是:

if(expression) statement; 

if(expression) { statement1; ... statementN; } 

你的代碼缺少括號使其成爲前者,因此,你的猜測是正確的。