2010-08-30 63 views
0

我創建了一個標誌Method1HasExecuted ,,我想實現的邏輯是,如果該標誌是真的我需要做 這個函數rp = Spa.Modify(val);否則返回RP爲false.For,我沒有這樣的優化導致無法訪問的代碼

 if (Method1HasExecuted) 
     { 
      rp = Spa.Modify(val);//Save operation, this function also return boolean value 
     } 
     else rp = false; 

然後優化我用三元運算符,做這樣的

return Method1HasExecuted ? Spa.ClientModify() : false; 

但是,這樣做下來這樣一邊,我看到了一些無法訪問的代碼已經是這樣的

1.如何使它可達或在這裏使用三元運算符是不是必需的?是,需要

2.After catch塊,我們可以看到底部return retval;,因爲所有的工作成果要麼是真的, 將執行保存操作或虛假手段在我的工作顯示serverdown,已經有

對於第二個問題,整個結構是現在這個樣子

回答

1

您翻譯的if-else語句成三元運算符,但你還加了return語句。問題是return語句總是返回,所以如果你的代碼在那個方法下面,那麼它永遠不會被執行。

你可以保持三元運算符,只是不返回:

rp = Method1HasExecuted ? Spa.ClientModify() : false; 

三元運算符將產生IL非常相似,你之前所擁有的if-else語句。它不會實質上更快,所以只有在您認爲它提高了代碼的可維護性或可讀性時才使用它。

+0

雖然我同意,這不是一個優化的IL不會是相同的。如果是一個語句,三元運算符是一個表達式。如果僅用於平衡堆棧所需的彈出式指令,這將使IL不同。 – Stilgar 2010-08-30 07:52:45

+0

是的,那很棒,那麼如果在rp = Method1HasExecuted中存在錯誤情況,那麼第二個問題呢? Spa.ClientModify():false;是需要向下或與抓取異常塊 – peter 2010-08-30 07:59:26

+0

@peter相關:我想你的方法仍然期望返回一些東西,所以'return retval;'仍然是必需的。 'if(rp)...'邏輯應該也可以保留,因爲它可能會在類'databaseLocked'中設置一些狀態並編寫一些診斷消息。 – 2010-08-30 08:10:16

1

你的問題是,你正在使用的RETURN ..

你應該做的:

rp = Method1HasExecuted ? Spa.ClientModify() : false; 

,其餘的應該是一樣的..

記得..回報將直接返回:)

1

其實,你應該做的:

rp = Method1HasExecuted && Spa.ClientModify();