Tratamento exceção (guia de programação translation from VPE for Csharp)

A Tente bloco é usado por programadores translation from VPE for Csharp ao código de partição que pode ser afetado por uma exceção e catch blocos são usados para tratar qualquer exceção resultante.A Por fim bloco pode ser usado para executar código independentemente de se uma exceção é lançada.Essa situação às vezes, é necessária porque o código que segue uma construção try/catch não será executado se uma exceção é lançada.Um bloco try deve ser usado com qualquer um problema ou um finalmente bloquear e pode incluir vários blocos catch.Por exemplo:

try
{
    // Code to try here.
}
catch (SomeSpecificException ex)
{
    // Code to handle exception here.
    // Only catch exceptions you know how to handle.
    // Never catch base class System.Exception without
    // rethrowing it at the end of the catch block.
}
try
{
    // Code to try here.
}
finally
{
    // Code to execute after try here.
}
try
{
    // Code to try here.
}
catch (SomeSpecificException ex)
{
    // Code to handle exception here.
}
finally
{
    // Code to execute after try (and possibly catch) here.
}

A try demonstrativo sem um catch ou finally bloco causará um erro do compilador.

Blocos Catch

A catch bloco pode especificar um tipo de exceção para capturar. Esse tipo é denominado um filtro de exceção, e deve ser um tipo derivado de Exception. Em geral, não especifique Exception em um bloco catch, a menos que você sabe com certeza como lidar com todas as exceções que podem ser lançadas no bloco try ou a menos que você inclua um throw demonstrativo no participante do seu bloco catch.

Vários catch blocos com filtros de exceção diferente podem ser encadeados. Vários catch blocos são avaliados de cima para baixo, mas apenas um catch bloco é executado para cada exceção lançada. O primeiro catch Bloquear que especifica o tipo exato ou uma classe base de exceção gerada será executada. Se nenhum bloco catch Especifica um filtro de exceção correspondente, um catch bloco sem um filtro (se houver) será executado. É importante posicionar catch bloqueia com mais específicas, ou seja, as classes de exceção mais derivadas pela primeira vez.

Você deve capturar exceções quando as seguintes condições forem verdadeiras:

  • Você tenha uma compreensão específica de por que a exceção foi lançada e pode implementar uma recuperação específica, sistema autônomo captura um FileNotFoundException objeto e solicitando que o usuário insira um novo nome de arquivo.

  • Você pode criar e lançar uma exceção de nova, mais específica.Por exemplo:

    int GetInt(int[] array, int index)
    {
        try
        {
            return array[index];
        }
        catch(System.IndexOutOfRangeException e)
        {
            throw new System.ArgumentOutOfRangeException(
                "Parameter index is out of range.");
        }
    }
    
  • Para manipular uma exceção parcialmente.Por exemplo, um catch bloco pode ser usado para adicionar uma entrada a um log de erros, mas, em seguida, relançar a exceção para habilitar subseqüente tratamento de exceção. Por exemplo:

    try
    {
        // try to access a resource
    }
    catch (System.UnauthorizedAccessException e)
    {
        LogError(e);  // call a custom error logging procedure
        throw e;      // re-throw the error
    }
    

Blocos Finally

A finally bloco permite limpar - up de ações executadas em um try bloco. Se estiver presente, o finally bloco é executado após o try e catch executar blocos. A finally bloco sempre será executado, independentemente de se uma exceção é lançada ou se um catch Bloco de correspondência de tipo de exceção é encontrado.

The finally bloco pode ser usado para liberar recursos, sistema autônomo fluxos de arquivo, conexões de banco de dados e alças de gráficos sem aguardar o coletor de lixo em tempo de execução para finalizar sistema autônomo objetos. Consulte usando demonstrativo (referência translation from VPE for Csharp) para obter mais informações.

Neste exemplo, a finally bloco é usado para fechar um arquivo aberto no try bloco. Observe que o estado do identificador de arquivo é verificado antes que ele seja fechado.Se o try bloco não abriu o arquivo, o identificador de arquivo ainda será definido null. Como alternativa, se o arquivo é em aberto com êxito e nenhuma exceção é lançada, a finally bloco ainda será executado e fechará o arquivo em aberto.

System.IO.FileStream file = null;
System.IO.FileInfo fileinfo = new System.IO.FileInfo("C:\\file.txt");
try
{
    file = fileinfo.OpenWrite();
    file.WriteByte(0xF);
}
finally
{
    // check for null because OpenWrite
    // might have failed
    if (file != null)
    {
        file.Close();
    }
}

Especificação da linguagem C#

Para obter mais informações, consulte as seções a seguir no Especificação da linguagem C#:

  • 16 Exceções

  • 8.9.5 A demonstrativo throw

  • 8.10 A demonstrativo try

Consulte também

Conceitos

Guia de Programação C#

Referência

Exceções e manipulação de exceção (guia de programação C#)

try-catch (Referência do C#) 

try-finally (Referência do C#)

try-catch-finally (translation from VPE for Csharp Reference)

Outros recursos

Referência C#