2016-09-28 73 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块之前或之后 –