0

「特定の」例外(FormatException ^またはOverflowException ^)をキャッチしてから、それを再スローして「一般的な」例外(Exception ^)キャッチブロックでキャッチしようとしています。

実行すると、入力を通じてフォーマットの例外が与えられます。次に、ダイアログ ボックスに次のエラーが表示されます。「break」をクリックすると、232 行目に移動します。

部分的なコードは次のとおりです。

try
{
...
}
catch(FormatException^ ex)
{
      MessageBox::Show("FormatException Occured.  Message: " + ex->Message);
      throw;
}
***line# 232*** catch(OverflowException^ ex)
{
      MessageBox::Show("Overflow Occured. Message: " + ex->Message);
      throw;
}
catch(Exception^ ex)
{
      MessageBox::Show("TESTING");
}
4

2 に答える 2

4

再スロー式 (assignment_expression なしのスロー) により、最初にスローされたオブジェクトが再スローされます。例外は、再スロー式が発生するスコープで既にキャッチされているため、動的に囲まれている次の try ブロックに再スローされます。そのため、再スロー式が発生したスコープの catch ブロックでは処理できません。

上記を考慮して、次のようにコードを書きたいと思うかもしれません:

try
{
    try
    {
       //...
    }
    catch(FormatException^ ex)
    {
          MessageBox::Show("FormatException Occured.  Message: " + ex >Message);
          throw;
    }
    catch(OverflowException^ ex)
    {
          MessageBox::Show("Overflow Occured. Message: " + ex->Message);
          throw;
    }
}
catch(Exception^ ex)
{
      MessageBox::Show("TESTING");
}
于 2010-09-30T20:46:07.460 に答える
0

この上に try catch ブロックはありますか?

throw ステートメントで例外をスローしましたが、誰もそれをキャッチしていません。デバッガーは、例外がスローされた場所に移動しました

于 2010-09-30T20:45:44.667 に答える