C# tente pegar

Resumo : neste tutorial, você aprenderá sobre exceções e como usar a try...catchinstrução C# para lidar com exceções.

Introdução à instrução try catch em C#

As exceções são erros de tempo de execução em um programa, que violam as restrições do sistema. Por exemplo, quando o programa tenta dividir um número por zero, ocorre uma exceção. Quando ocorre uma exceção, o sistema a captura e gera a exceção.

Se o programa não tratar a exceção corretamente, ele irá travar. Por exemplo, o programa a seguir irá travar devido a uma exceção:

int amount = 100;
int qty = 0;

int result = amount / qty;

Console.WriteLine(result);Linguagem de código:  C#  ( cs )

Neste exemplo, o programa travou com a seguinte mensagem de erro:

System.DivideByZeroException: 'Attempted to divide by zero.'Linguagem de código:  C#  ( cs )

Nesta mensagem de erro, o nome da exceção é System.DivideByZeroException. E a mensagem de erro indica que o programa tentou dividir por zero.

Se você não lidar com exceções, os usuários verão mensagens de erro pouco amigáveis. O objetivo do tratamento de exceções é responder a uma exceção com uma das seguintes ações:

  • Exiba uma mensagem amigável aos usuários e solicite que eles tomem ações corretivas para manter o programa funcionando corretamente.
  • Registre as informações da exceção em um arquivo para que você possa resolvê-la posteriormente.
  • Limpe quaisquer recursos externos, como conexões de banco de dados.

Para lidar com exceções, você usa a try...catchinstrução:

try
{
    // statements to be guarded for exceptions
}
catch
{
    // exception handler

}Linguagem de código:  C#  ( cs )

Nesta sintaxe:

  • Primeiro, coloque as instruções que você deseja proteger contra exceções no trybloco.
  • Segundo, forneça o manipulador de exceção no catchbloco para tratar a exceção.

Quando ocorre uma exceção no trybloco, o controle do programa salta imediatamente para o catchbloco.

O programa a seguir mostra como usar a try...catchinstrução para tratar a exceção:

int amount = 100;
int qty = 0;

try
{
    int result = amount / qty;
    Console.WriteLine(result);
}
catch
{
    Console.WriteLine("The program was terminated due to an error.");
}

Console.WriteLine("Bye!");Linguagem de código:  C#  ( cs )

Saída:

The program was terminated due to an error.
Bye!Linguagem de código:  C#  ( cs )

Neste programa DivideByZeroExceptionocorreu a exceção que fez com que o catchbloco fosse executado e exibisse a mensagem de erro. O programa funcionou sem travar.

Se você souber o tipo exato de exceção, poderá especificá-lo no catchbloco. Por exemplo:

int amount = 100;
int qty = 0;

try
{
    int result = amount / qty;
    Console.WriteLine(result);
}
catch(DivideByZeroException e)
{
    Console.WriteLine("The program was terminated due to an error.");
    Console.WriteLine($"Message: {e.Message}");
    Console.WriteLine($"Source: {e.Source}");
    Console.WriteLine($"Stack: {e.StackTrace}");
}

Console.WriteLine("Bye!");Linguagem de código:  C#  ( cs )

Saída:

The program was terminated due to an error.
Message: Attempted to divide by zero.
Source: Program
Stack:    at Program.<Main>$(String[] args) in D:\csharp\Program.cs:line 6
Bye!Linguagem de código:  C#  ( cs )

Neste exemplo, o bloco catch capturou a DivideByZeroExceptionexceção e atribuiu uma instância à evariável. O DivideByZeroExceptionobjeto ( e) possui informações detalhadas sobre a exceção como:

  • Message– contém a mensagem de erro que explica a causa da exceção.
  • Source– contém o nome do assembly onde a exceção se originou.
  • StackTrace– descreve onde ocorreu a exceção.

Tipos de exceção

C# define muitas classes de exceção, cada uma representando um tipo específico. Todas as classes de exceção são derivadas da System.Exceptionclasse, que por sua vez é derivada da System.Objectclasse.

A imagem a seguir ilustra a hierarquia de exceções:

Mais sobre a cláusula catch

A catchcláusula trata exceções. Possui quatro formas.

1) Cláusula geral de captura

A cláusula geral catchnão possui uma lista de parâmetros da catchpalavra-chave. Corresponde a qualquer exceção levantada no trybloco:

try
{ 
}
catch
{
}Linguagem de código:  C#  ( cs )

2) Cláusula de captura específica

Uma catchcláusula específica especifica o nome de uma classe de exceção como um único parâmetro. Corresponde a qualquer exceção com o nome que corresponde ao parâmetro:

try
{
    // statement
}
catch (ExceptionType)
{
    // handle exception with the ExceptionType
}Linguagem de código:  C#  ( cs )

3) Cláusula catch específica com objeto

A catchcláusula específica com um objeto inclui uma variável de exceção após o nome da classe de exceção. Esta variável de exceção faz referência ao objeto de exceção. Ao usar uma variável de exceção, você pode acessar informações específicas sobre a exceção.

try
{
    // statement
}
catch (ExceptionType e)
{
    // handle exception with the ExceptionType
}Linguagem de código:  C#  ( cs )

4) Captura específica com predicado

A captura específica é como uma captura específica catchcom um objeto, mas também inclui um predicado. O catchserá executado somente se a condição no predicado for true:

try
{
    // statement
}
catch (ExceptionType e) where (predicate)
{
    // handle exception with the ExceptionType
}Linguagem de código:  C#  ( cs )

Resumo

  • As exceções são erros de tempo de execução que ocorreram no programa.
  • Use a try...catchinstrução para lidar com exceções.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *