web-dev-qa-db-ja.com

ネストされたTryブロックとCatchブロック

ネストしたtry-catch SharePointのカスタムC#コードでブロックします。内側のcatchブロック内のコードが例外をスローした場合、1つの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にも到達したくない。

22
Mathematics

その場合に外側の例外を実行したくない場合は、内側のcatchブロックから例外をスローしないでください。

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

内側の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 {}からトリガーされません

13
iabbott