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