web-dev-qa-db-fra.com

Blocs imbriqués Try and Catch

J'ai imbriqué try-catch bloque dans un code C # personnalisé pour SharePoint. Je veux exécuter le code dans un seul bloc catch (celui interne) lorsque le code à l'intérieur du bloc try intérieur lève une exception.

try
{
 //do something

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

   }
   catch(Exception ex) {...}

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

Je sais que je peux utiliser différents types d'exceptions, mais ce n'est pas ce que je recherche.

Résumé

Si une exception se produit, je ne veux pas qu'elle atteigne le parent catch en plus du catch intérieur.

22
Mathematics

Si vous ne souhaitez pas exécuter l'exception externe dans ce cas, vous ne devez pas lever l'exception à partir du bloc catch interne.

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

Le catch externe ne se déclencherait pas si le catch interne gérait l'exception

Si vous voulez que le catch externe se déclenche également, vous devez faire:

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
}

Essentiellement, comme vous avez maintenant le code, le catch externe ne sera pas déclenché à partir du try {} catch {} Interne

13
iabbott