Compartilhar via


(Guia de programação C#) de manipulação de exceção

A tente block é usado por programadores C# código de partição pode ser afetado por uma exceção. Associado catch blocos são usados para tratar qualquer exceção resultante. A Finalmente bloco contém código que é executado independentemente de estarem ou não uma exceção é lançada try bloco, como, por exemplo, liberando os recursos são alocados a try bloco. A try bloco requer um ou mais associados catch blocos, ou um finally bloco, ou ambos.

Os exemplos a seguir mostram uma try-catch declaração, uma try-finally instrução e um try-catch-finally instrução.

try
{
    // Code to try goes here.
}
catch (SomeSpecificException ex)
{
    // Code to handle the exception goes here.
    // Only catch exceptions that 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 goes here.
}
finally
{
    // Code to execute after the try block goes here.
}
try
{
    // Code to try goes here.
}
catch (SomeSpecificException ex)
{
    // Code to handle the exception goes here.
}
finally
{
    // Code to execute after the try (and possibly catch) blocks 
    // goes here.
}

A try Bloquear sem um catch ou finally bloco causa um erro do compilador.

Blocos Catch

A catch bloco pode especificar o tipo de exceção catch. A especificação de tipo é chamada um filtro de exceção. O tipo de exceção deve ser derivado de Exception. Em geral, não especifique Exception como o filtro de exceção, a menos que seja você sabe como lidar com todas as exceções que podem ser geradas na try bloco, ou você tenha incluído um Lançar instrução no final do seu catch bloco.

Vários catch blocos com filtros de exceção diferente podem encadeados. O catch blocos são avaliados de cima para baixo no seu código, mas apenas um catch bloco é executado para cada exceção é acionada. O primeiro catch bloco que especifica o tipo exato ou uma classe base da exceção lançada é executado. Se nenhum catch bloco Especifica um filtro de exceção correspondente, um catch bloco que não tenha um filtro estiver selecionado, se houver na instrução. É importante apresentar catch tipos de blocos, com exceção de mais específica (isto é, o mais derivado) pela primeira vez.

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

  • Você tem uma boa compreensão de por que a exceção pode ser lançada e você pode implementar uma recuperação específica, como, por exemplo, solicitando que o usuário insira um novo nome de arquivo quando você capturar uma FileNotFoundException objeto.

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

    int GetInt(int[] array, int index)
    {
        try
        {
            return array[index];
        }
        catch(System.IndexOutOfRangeException e)
        {
            throw new System.ArgumentOutOfRangeException(
                "Parameter index is out of range.");
        }
    }
    
  • Você deseja manipular parcialmente uma exceção antes de transmiti-lo para manipulação adicional. No exemplo a seguir, um catch block é usado para adicionar uma entrada para um log de erros antes de relançar a exceção.

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

Blocos Finally

A finally bloco permite que você limpar a ações que são executadas em um try bloco. Se estiver presente, o finally bloco é executado a última, após a try bloco e qualquer correspondência catch bloco. A finally Bloquear sempre é executado, independentemente de se uma exceção é lançada ou uma catch correspondente ao tipo de exceção do bloco for encontrado.

O finally bloco pode ser usado para liberar recursos como fluxos de arquivos, conexões de banco de dados e alças de gráficos sem aguardar o coletor de lixo no runtime para finalizar a objetos. Consulte usando instrução (referência de C#) para obter mais informações.

No exemplo a seguir, o finally block é usado para fechar um arquivo é aberto no try bloco. Observe que o estado de identificador de arquivo é verificado antes que o arquivo é fechado. Se o try bloco não é possível abrir o arquivo, o identificador de arquivo ainda possui o valor null e o finally bloco não tenta feche-o. Como alternativa, se o arquivo é aberto com êxito na try bloco, o finally bloco fecha o arquivo 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 C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Exceptions and Exception Handling (C# Programming Guide)

try-catch (C# Reference)

try-finally (C# Reference)

Tente catch de--finalmente (referência de C#)

usando instrução (referência de C#)

Conceitos

C# Programming Guide

Outros recursos

C# Reference