2011-04-20 35 views
7

在接受採訪時,記者問我..這 我有寫在一側的代碼像上的錯誤catch塊沒叫

try 
{ 
//code line 1 
//code line 2 
//code line3 -- if error occur on this line then did not go in the catch block 
//code line 4 
//code line 5 
} 
catch() 
{ 
    throw 
} 

try與catch塊假設我們得到了代碼中的錯誤3號線 那麼這將不會走在catch塊 但如果我上除了3線的任何其他行有錯誤就在catch塊去

這是可能的,如果在一個特定的行發生錯誤,那麼它是不是去在catch塊?

+2

執行第3行時,從電腦上拔下電源和絃:) – Jan 2011-04-20 20:56:58

+0

OOM和SO異常很難(不可能?)捕捉。 – 2011-04-20 21:00:25

+0

實際面試問題是什麼?如何做到這一點,第3行不會導致catch塊被輸入,或給定的代碼,第3行可能會做什麼可能會阻止catch捕捉任何東西? – 2011-04-20 21:11:47

回答

3

你可以在另一try/catch塊包裝線3:

try 
{ 
    //code line 1 
    //code line 2 
    try 
    { 
     //code line3 -- if error occur on this line then did not go in the catch block 
    } 
    catch { } 
    //code line 4 
    //code line 5 
} 
catch() 
{ 
    throw; 
} 

而且面試官必須已定義錯誤。正在討論一個例外,因爲錯誤可能意味着很多事情=>蹩腳的代碼,例外,不像預期的代碼行爲...

+0

我刪除了我的答案。 'ThreadAbortException'可以被捕獲,但是它會在catch塊的末尾再次被引發。 – Aliostad 2011-04-20 20:57:50

+0

downvote的任何原因? downvoting時請留言。 – 2011-04-20 21:00:23

+1

我沒有投票,所以這裏沒有混淆。但我想評論你的答案。你的答案仍然沒有說明爲什麼它沒有發現異常。如果使用參數catch(),您的解決方案sitll將不起作用。 – Priyank 2011-04-20 21:05:50

3

如果你行3導致non CLS-compliant exceptions,它不會被趕上參數化catch()塊。要捕獲所有類型的異常,請使用無參數的catch塊。

try 
{ 
// Statement which causes an exception 
} 

catch //No parameters 
{ 
//Handles any type of exception 
} 

.net Exception catch block

0

簡短的回答:是的

有一個catch塊不會出現錯誤。我認爲內存不足錯誤。異常可以跳過塊的另一種方式是如果拋出的錯誤不是您定義的錯誤之一。