Compartilhar via


Captura e inclusão de tipos de exceção padrão

As diretrizes a seguir descrevem as práticas recomendadas de algumas das exceções mais usadas fornecidas pelo .NET estrutura. Para obter uma lista completa das classes de exceção fornecida pelo estrutura, consulte o Referência à Biblioteca Classe do .NET Framework documentação.

Exceção e SystemException

Lança sistema.exceção ou sistema.SystemException.

Não capturar sistema.exceção ou sistema.SystemException no código de estrutura, a menos que pretenda reemita.

Evite a captura de sistema.Exception ou sistema.SystemException, exceto nos manipuladores de exceção de nível superior.

ApplicationException

Deriva exceções personalizadas da classe T:sistema. exceção em vez da classe T:sistema.ApplicationException.

Ele foi originalmente pensou que exceções personalizadas devem derivar do ApplicationException classe; no entanto, isso não foi encontrado para adicionar um valor significativo. Para obter mais informações, consulte Práticas recomendadas para tratamento de exceções.

InvalidOperationException

Lançar uma exceção sistema.InvalidOperationException se em um estado inadequado.sistema.InvalidOperationException devem ser lançadas se conjunto uma propriedade ou uma telefonar de método não for apropriada dado estado corrente do objeto.Por exemplo, a gravação em um sistema.IO.FileStream que foi aberto para leitura deve lançar uma exceção sistema.InvalidOperationException.

Essa exceção também deve ser lançada quando o estado de um conjunto de objetos relacionados combinado é inválido para a operação.

ArgumentException ArgumentNullException e ArgumentOutOfRangeException

Exiba sistema.ArgumentException ou um de seus subtipos se incorreto de argumentos é passado para um membro.Prefira o tipo de exceção mais derivado se for aplicável.

O exemplo de código a seguir demonstra a lançar uma exceção quando um argumento é null (Nothing no Visual Basic).

If (anObject = Nothing) Then
    Throw New ArgumentNullException("anObject", "Specify a non-null argument.")
End If
if (anObject == null)
{
    throw new ArgumentNullException("anObject",
        "Specify a non-null argument.");
}

Fazer conjunto a propriedade sistema.ArgumentException.ParamName quando lançar sistema.ArgumentException ou um de seus tipos derivados.Essa propriedade armazena o nome do parâmetro que causou a exceção seja lançada.Observe que a propriedade pode ser definida usando uma das sobrecargas do construtor.

Use valor para o nome do parâmetro value implícito de setters de propriedade.

O exemplo de código a seguir mostra uma propriedade que lança uma exceção se o chamador passa um argumento nulo.

Public Property Address() As IPAddress
    Get
        Return IPaddr
    End Get
    Set(ByVal value As IPAddress)
        If IsNothing(value) Then
            Throw New ArgumentNullException("value")
        End If
        IPaddr = value
    End Set
End Property
public IPAddress Address
{
    get
    {
        return address;
    }
    set
    {
        if(value == null)
        {
            throw new ArgumentNullException("value");
        }
        address = value;
    }
}

Não permita publicamente acessível APIs explícita ou implicitamente lançar sistema.NullReferenceException, sistema.AccessViolationException, sistema.InvalidCastException ou sistema.IndexOutOfRangeException.Fazer verificação, a fim de evitar gerar essas exceções de argumento.Gerar essas exceções expõe detalhes de implementação do método que pode ser alterado ao longo do time.

StackOverflowException

Não lança explicitamente exceção sistema.StackOverflowException.Essa exceção deve ser explicitamente lançada somente pela Common linguagem tempo de execução (CLR).

Não captura exceção sistema.StackOverflowException.

É extremamente difícil manipular programaticamente um estouro de pilha. Você deve permitir essa exceção terminar o processo e de depuração para determinar fonte do problema.

OutOfMemoryException

Não lança explicitamente sistema.OutOfMemoryException.Essa exceção deve ser lançada somente pela infra-estrutura de CLR.

ComException e SEHException

Não explicitamente jogar sistema.tempo de execução.InteropServices.COMException ou sistema.tempo de execução.InteropServices.SEHException.Essas exceções devem ser lançadas somente pela infra-estrutura de CLR.

Não captura sistema.tempo de execução.InteropServices.SEHException explicitamente.

ExecutionEngineException

Não lança explicitamente sistema.ExecutionEngineException.

Partes direitos autorais 2005 Microsoft Corporation. Todos os direitos reservados.

Partes direitos autorais Addison-Wesley Corporation. Todos os direitos reservados.

Para obter mais informações sobre diretrizes de design, consulte a "diretrizes de design do estrutura: Catálogo de convenções, idiomas e padrões para bibliotecas do .NET reutilizável"Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.

Consulte também

Conceitos

Escolhendo o tipo correto de exceção para lançar

Outros recursos

Diretrizes de Design para desenvolvimento bibliotecas de classe

Diretrizes de design para exceções