Вопрос

Я пытаюсь поймать «конкретное» исключение (форматеэксемент ^ или OverflowException ^), а затем перебросить его и поймать его в «общее» исключение (исключение ^).

При запуске я даю ему исключение формата через вход. Затем я получаю эту ошибку в диалоговом окне: «Необработанное исключение типа« System.Formatexception »произошло в FutureValue.exe Дополнительная информация: входная строка не была в правильном формате». Когда я нажимаю «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");
}
Это было полезно?

Решение

Рентгеновое выражение (бросок без назначения_Экспрессией) вызывает изначально брошенный объект Rethrown. Поскольку исключение уже было поймано на прицелах, в котором возникает выражение ретроу, он представляет собой Rethrown к следующему динамически оградующему блоку попробовать. Следовательно, он не может быть обрабатываться от блоков CALL в объеме, в котором произошло выражение ритровы.

Принимая во внимание, вы можете захотеть написать ваш код так:

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");
}

Другие советы

Есть ли попробуйте поймать блок над этим?

Вы только что бросили исключение с выпиской броска, никто не ловит его. Отладчик взял вас на то, где был брошен исключение

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top