2016-09-28 72 views
-4

如何處理try catch塊並保持for循環運行?處理for循環中的結構try catch塊

在我的情況

foreach (var str in strArr) 
{ 
    try 
    { 
     var s1 = gets1(str); 
     try 
     { 
      var s2 = gets2(s1); 
     } 
     catch (Exception ex) 
     { 
      myLog(ex.message); 
     } 
    } 
    catch (Exception ex) 
    { 
     myLog(ex.message); 
    } 
} 

問題1)

如果任何異常發生,foreach循環保持被殺死。

問題2)

如果gets2(S1)獲取誤差,catch塊將捕獲該異常?

+1

好造成的,想想吧在邏輯上,你認爲你的問題的答案是什麼,爲什麼你會這麼想? –

+1

請重新說明問題1.對於問題2,內部捕獲當然會處理異常。調試會幫助你更好。 –

+1

爲什麼你不會從gets1和gets2函數中引發異常來回答你的問題。 「拋出新的例外」應該可以幫到你。 –

回答

0

循環不會因爲捕獲異常而死亡,所以您的代碼將繼續運行。

也是異常處理它取決於發生異常的地方。

當發生異常時,異常將傳回到第一個可用的異常處理程序。

因此,如果S2是有一個例外,它會被抓到這裏來,

try 
    { 
     var s2 = gets2(s1); 
    } 
    catch (Exception ex) 
    { 
     myLog(ex.message); 
     Exception caught here 
    } 

另外,如果您的例外是你有你的第二個前嘗試

try 
{ 
    var s1 = gets1(str); 
    Exception Caught here 
    .... 
    other try... 
} 
catch (Exception ex) 
{ 
    myLog(ex.message); 
    Exception would be caught here. 

} 
+0

還有一個問題,如果gets1()有其自己的try catch塊並且在gets1()方法內發生異常。請試一試var s2 = gets2(s1); (例外ex) { } myLog(ex.message); 這裏抓到的例外 }'被運行嗎? –

+0

它取決於如果異常發生在嵌套try catch塊之前或之後 –