-1

私には2つの機能があります。FunA から例外 FunB までが実行されない場合。FunA コードに Try catch を配置し、例外が FunA() を通過する場合、FunA 例外を表示します。しかし、それは起こっていません。これを達成する方法は?

try
{
   FUNA();
   FUNB(); 
}
catch (Exception exp)
{ 
   System.Console.WriteLine("Error has occurred during processing:\n" + exp.ToString());
}
4

2 に答える 2

4

編集:このビットに気づきました:

FunA コードに Try catch を配置し、例外が FunA() を通過する場合、FunA 例外を表示します。

さて、あなたはFunAコードを示していません。を呼び出す コードを示しましたFunAFunAメソッドのブロック内に問題のあるコードがあり、適切なブロックが再スローされてない場合、例外は伝播しません(それが である場合を除きますが、それは少し特殊です)。trycatchThreadAbortException

しかし、そうでなければいいえ、FunB実行されません。これが try/catch の仕組みです。例外がスローされると、実行フローはtryブロックを離れ、中断した場所には戻りません。失敗しても本当に実行したい場合は、ブロックのに呼び出しを行う必要があります。FunBFunAcatch

try
{
    FunA();
}
catch (IOException e) // Or whatever specific exception you want...
{
    // Logging here... or possibly returning, or rethrowing in some cases
}
FunB();

ここで特定の例外をキャッチした方法に注意してください。Exception1 つの論理操作 (Web リクエストやユーザーが開始したアクションなど) の最上位レベルを除いて、単に をキャッチする必要はほとんどありません。おそらく、実際に処理できる例外 (つまり、修正できる状況)は比較的少なく、処理できない例外はたくさんあるので、そのような場合には先に進まないでください。

FunBもちろん、try/catch ステートメントを入れることもできます。

于 2012-12-11T06:59:56.933 に答える
0

これを正しく解釈すると:

FunA コードに Try catch を配置し、例外が FunA() を通過する場合、FunA 例外を表示します。

FunA()次に、例外をキャッチした後、例外を再スローする必要がありますか?

FunA()印刷した後、catch ブロック内にこれを追加するだけです。

throw;
于 2012-12-11T07:04:28.890 に答える