0

我试图捕获一个“特定”异常(FormatException^ 或 OverflowException^),然后重新抛出它并在“一般”异常(Exception^)捕获块中捕获它。

运行时,我通过输入给它一个格式异常。然后,我在对话框中收到此错误:“FutureValue.exe 中发生了 'System.FormatException' 类型的未处理异常附加信息:输入字符串的格式不正确。” 当我单击“中断”时,它会将我带到第 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

rethrow 表达式(throw without 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 回答