Eventos
Crie aplicativos e agentes de IA
17 de mar., 21 - 21 de mar., 10
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agoraNão há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
As exceções em C# fornecem uma maneira estruturada, uniforme e segura de lidar com condições de erro no nível do sistema e no nível do aplicativo.
As exceções podem ser lançadas de duas maneiras diferentes.
throw
instrução (§13.10.6) gera uma exceção imediata e incondicionalmente. O controle nunca alcança a instrução imediatamente após o throw
.Exemplo: uma operação de divisão inteira (§12.10.3) gera um
System.DivideByZeroException
se o denominador for zero. exemplo de fim
A System.Exception
classe é o tipo base de todas as exceções. Essa classe tem algumas propriedades notáveis que todas as exceções compartilham:
Message
é uma propriedade somente leitura do tipo string
que contém uma descrição legível do motivo da exceção.InnerException
é uma propriedade somente leitura do tipo Exception
. Se seu valor for non-null
, ele se referirá à exceção que causou a exceção atual. (Ou seja, a exceção atual foi gerada em um bloco catch que manipula o InnerException
.) Caso contrário, seu valor será null
, indicando que essa exceção não foi causada por outra exceção. O número de objetos de exceção encadeados dessa maneira pode ser arbitrário.O valor dessas propriedades pode ser especificado em chamadas para o construtor de instância para System.Exception
.
As exceções são tratadas por uma try
instrução (§13.11).
Quando uma exceção é lançada (§21.2), o sistema procura a cláusula catch mais próxima que pode lidar com a exceção, conforme determinado pelo tipo de tempo de execução da exceção. Primeiro, o método atual é pesquisado por uma declaração delimitadora try
lexical, e as cláusulas associadas catch
da try
instrução são consideradas em ordem. Se isso falhar, o método que chamou o método atual será pesquisado por uma instrução lexicalmente delimitadora try
que inclua o ponto da chamada para o método atual. Essa pesquisa continua até que seja encontrada uma catch
cláusula que possa lidar com a exceção atual, nomeando uma classe de exceção que seja da mesma classe, ou uma classe base, do tipo de tempo de execução da exceção que está sendo lançada. Uma catch
cláusula que não nomeia uma classe de exceção pode lidar com qualquer exceção.
Depois que uma cláusula correspondente catch
é encontrada, o sistema se prepara para transferir o controle para a primeira instrução da catch
cláusula. Antes do início da execução da catch
cláusula, o sistema primeiro executa, em ordem, todas as finally
cláusulas que foram associadas a try
instruções mais aninhadas do que aquela que capturou a exceção.
Se nenhuma cláusula correspondente catch
for encontrada:
catch
atingir um construtor estático (§15.12) ou inicializador de campo estático, a System.TypeInitializationException
será lançado no ponto que disparou a invocação do construtor estático. A exceção interna do System.TypeInitializationException
contém a exceção que foi originalmente lançada.catch
atingir o código que iniciou inicialmente o thread, a execução do thread será encerrada. O impacto de tal rescisão é definido pela implementação.As exceções a seguir são geradas por determinadas operações C#.
Tipo de exceção | Descrição |
---|---|
System.ArithmeticException |
Uma classe base para exceções que ocorrem durante operações aritméticas, tais como System.DivideByZeroException e System.OverflowException . |
System.ArrayTypeMismatchException |
Lançado quando um armazenamento em uma matriz falha porque o tipo do elemento armazenado é incompatível com o tipo da matriz. |
System.DivideByZeroException |
Lançado quando ocorre uma tentativa de dividir um valor integral por zero. |
System.IndexOutOfRangeException |
Lançado quando uma tentativa de indexar uma matriz por meio de um índice menor que zero ou fora dos limites da matriz. |
System.InvalidCastException |
Lançada quando uma conversão explícita de um tipo base ou interface para um tipo derivado falha em tempo de execução. |
System.NullReferenceException |
Lançado quando uma null referência é usada de uma forma que faz com que o objeto referenciado seja necessário. |
System.OutOfMemoryException |
Lançado quando uma tentativa de alocar memória (via new ) falha. |
System.OverflowException |
Lançada quando uma operação aritmética em um contexto checked estoura. |
System.StackOverflowException |
Lançado quando a pilha de execução está esgotada por ter muitas chamadas pendentes; Normalmente indicativo de recursão muito profunda ou ilimitada. |
System.TypeInitializationException |
Lançado quando um construtor estático ou inicializador de campo estático lança uma exceção e não existe nenhuma catch cláusula para capturá-la. |
Comentários do ECMA C# draft specification
O ECMA C# draft specification é um projeto código aberto. Selecione um link para fornecer comentários:
Eventos
Crie aplicativos e agentes de IA
17 de mar., 21 - 21 de mar., 10
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agora