2010-04-30 59 views
11

我有例如在我的方法使用try/catch後:退出的try/catch防止代碼從正在運行

} 
    catch (OurCustomExceptionObject1 ex) 
    { 
     txtErrorMessage.InnerHtml = "test 1"; 
    } 
    catch(OurCustomExceptionObject2 ex) 
    { 
     txtErrorMessage.InnerHtml = "test 2"; 
    } 
    catch (OurCustomExceptionObject3 ex) 
    { 
     txtErrorMessage.InnerHtml = "test 3"; 
    } 

    ... rest of code here is being executed after the try/catch 

我不想的代碼的其餘部分是否有任何異常運行被抓到。我正在處理例外。我聽說不使用退出嘗試出於某種原因。這是真的嗎,這樣做不好嗎?這是否正確地停止catch語句之後的代碼執行?

+1

Exit Try只存在於VB.NET中。它不適用於C#。在C#中,相應的語言特性將是'break',但在try..catch..finally塊中這是非法的。接下來最好的事情就是「返回」,這種做法並不一樣,但是完全合法。 – stakx 2010-04-30 22:01:21

+0

@stakx'break'在'catch'塊中不是非法的。它可以用來擺脫循環。 – 2015-06-02 08:00:09

回答

30

catch-block中的return,重新拋出異常,或從try-block內的try-block下面移動代碼。

+0

準確地說,我要回答 – BlitzKrieg 2010-04-30 21:58:38

+2

是的。我認爲在這種情況下移動代碼是最好的方法。如果你想在發生異常時停止代碼 - 不要做任何事情。異常已經中斷了執行流程。如果你想處理這個操作,只需用try-catch來包圍整個事物。雖然如果它是一種方法,我會圍繞方法調用而不是方法體,所以異常不會被無意地吞噬。 – 2010-04-30 23:49:16

+0

是的,這是真的。但在我的情況下,其餘的代碼如此之多。在try語句中放置大量代碼是可以的嗎?因爲那部分中的每個捕獲物最終都會被抓到一個捕獲物中,例如我將無法將哪個例外引用到哪裏。 – Disasterkid 2013-01-16 08:48:02

1

兩個選項立刻浮現在腦海:

  1. return從每個catch內直(如BlueRaja建議)
  2. 設置標誌(例如,errorOccurred)的catch塊中的例外,你不要允許,然後把if (errorOccurred) return;整個try/catch塊

後者威力更意圖後dable給其他開發者,因爲很容易瀏覽一下catch裏面發生的事情,找出事後發生的事情。看到一個公然的if (errorOccurred) return;使人們很難誤解發生了什麼。

1

從高層次看,我認爲如果你的代碼試圖做一些可能失敗的事情,那麼這可能會違反(至少)單一責任原則,然後繼續做更​​多的事情。

一個答案的緣故不過,如果你想要做一個黑客(這總是不好的,所以不要),你可以做

bool success = true; 
try 
{ 
    // the good ol' college try 
} 
catch (...) 
{ 
    success = false; 
} 

if (success) 
{ 
    // do the rest of your stuff 
} 

編輯:或者稱爲BlueRaja建議,將的所有代碼放入try塊。如果第一位失敗,則失敗。其餘的代碼無法運行。

+0

我不知道。這一切都取決於需要發生的情況和邏輯。我不明白爲什麼後面的處理會傷害任何東西,如果你正在做的所有處理預期錯誤的方法都是在捕獲後記錄並移到方法中的下一個代碼。 – PositiveGuy 2010-05-01 02:47:13