Вложенные блоки Try и Catch

У меня есть вложенные блоки try-catch в пользовательский код С# для SharePoint. Я хочу выполнить код только в одном блоке catch (внутренний), когда код внутри внутреннего блока try генерирует исключение.

try
{
 //do something

   try
   {
        //do something              if exception is thrown, don't go to parent catch

   }
   catch(Exception ex) {...}

}
catch(Exception ex)
{ .... }

Я знаю, что могу использовать разные типы исключений, но это не то, что я ищу.

Резюме

Если возникает исключение, я не хочу, чтобы он достиг родительского catch в дополнение к внутреннему catch.

Ответ 1

Если вы не хотите выполнять внешнее исключение, в этом случае вы не должны генерировать исключение из внутреннего блока catch.

try
{
 //do something
   try
   {
      //do something              IF EXCEPTION HAPPENs don't Go to parent catch
   }
   catch(Exception ex)
   {  
     // loogging and don't use "throw" here.
   }
}
catch(Exception ex)
{ 
  // outer looging
}

Ответ 2

Внешний catch не срабатывает, если внутренний catch обрабатывает исключение

Если вы хотите, чтобы внешний catch загорелся, вам нужно будет:

try
{
 //do something

   try
   {
        //do something 

   }
   catch(Exception ex) 
    {
        // do some logging etc...
        throw;
    }

}
catch(Exception ex)
{ 
    // now this will be triggered and you have 
    // the stack trace from the inner exception as well
}

По существу, поскольку у вас теперь есть код, внешний catch не будет запускаться из внутреннего try {} catch {}