Pergunta

Estou tentando capturar uma exceção 'específica' (formatexception^ou o flowexception^) e depois jogue -o e pegue -o na exceção 'geral' (exceção^) Bloco de captura.

Quando executado, dou uma exceção de formato através da entrada. Em seguida, recebo esse erro em uma caixa de diálogo: "Uma exceção não tratada do tipo 'System.Formatexception' ocorreu em FutureValue.exe Informações adicionais: a string de entrada não estava em um formato correto." Quando clico em 'quebrar', leva -me à linha # 232.

Aqui está o código parcial:

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");
}
Foi útil?

Solução

A expressão do Rethrow (arremesso sem atribuição_expression) faz com que o objeto originalmente jogado seja renegado. Como a exceção já foi capturada no escopo em que a expressão de Rethrow ocorre, ela é retirada para o próximo bloco de tentativa dinamicamente que envolve. Portanto, não pode ser tratado por blocos de captura no escopo em que a expressão de Rethrow ocorreu.

Levando em consideração, convém escrever seu código como este:

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

Outras dicas

Existe uma tentativa de captura de captura acima disso?

Você acabou de lançar uma exceção com a declaração de arremesso, ninguém está pegando. O depurador levou você a onde a exceção foi lançada

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top