处理for循环中的结构try catch块

时间:2016-09-28 14:16:03

标签: c#

如何在保持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 个答案:

答案 0 :(得分: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. 

 }