freeCodeCamp/guide/portuguese/csharp/try-catch/index.md

4.1 KiB

title localeTitle
Try Catch Finally Tente pegar Finalmente

Tente pegar Finalmente

Um bloco Try-Catch-Finally é usado para evitar exceções não tratadas que quebram seu aplicativo. Quando seu código throws uma exceção que fica entre a seção try , ele será capturado na parte catch da instrução, onde você pode manipulá-lo como desejar. A instrução finally é sempre executada no final e geralmente é usada para limpar recursos não gerenciados. Você nem sempre precisa ter os três blocos presentes, abaixo estão as opções válidas.

  • Try-Catch-Finally
  • Try-Catch
  • Tente-finalmente

Sintaxe

try 
 { 
   // Code which could potentially throw an exception 
   var parsedValue = Int32.Parse("abcde"); 
 } 
 catch(Exception e) 
 { 
    // Code to handle the exception 
    Console.WriteLine("Exception: " + e.Message); 
 } 
 finally 
 { 
    // Code which will always run no matter what. 
    Console.WriteLine("Try-Catch block has finished execution"); 
 } 

No exemplo acima, estamos tentando converter 'abcde' em um valor numérico. Esta linha lançará uma exceção porque não pode ser convertida para um número com sucesso. A execução será capturada no bloco catch e a mensagem de exceção e outros detalhes serão armazenados na variável designada no bloco catch (A letra 'e' no exemplo acima). Depois de tudo isso ter sido executado, a seção "finalmente" será executada para finalizá-la.

Tente bloquear

O bloco try deve ser colocado em volta do código que pode se comportar de maneira fora do comum e causar uma Exception e interromper sua aplicação. Por ter um bloco try você se protege de uma falha fatal do aplicativo. É importante observar que, assim que seu aplicativo tiver um erro e uma exceção for lançada, o resto do código no bloco Try não será executado.

Um bloco try tem seu próprio escopo de método, portanto, qualquer variável declarada dentro do bloco try não será acessível fora do bloco try.

try 
 { 
    // Read user input from the console. 
    var userInput = Console.ReadLine(); 
 } 
 catch(Exception e) 
 { 
    Console.WriteLine("Exception: " + e.Message); 
 } 
 
 //Outside the Try block 
 var parsedUserInput = Int32.Parse(userInput);  // Not correct 

Acima, você receberá um erro de tempo de compilação, pois o valor 'userInput' não está acessível. Se você precisar acessar uma variável fora do bloco try-catch, será necessário declarar a variável antes do bloco try.

var userInput = ""; 
 try 
 { 
    // Read user input from the console. 
    userInput = Console.ReadLine(); 
 } 
 catch(Exception e) 
 { 
    Console.WriteLine("Exception: " + e.Message); 
 } 
 
 //Outside the Try block 
 var parsedUserInput = Int32.Parse(userInput);  // Correct 

Bloco de captura

Este bloco é onde você especifica o tipo de Exception que deseja capturar. Se você quiser pegar TODAS as exceções possíveis, você pode usar a classe base Exception . Se você deseja capturar apenas um tipo específico de exceção, é possível especificar isso. Alguns exemplos de outros tipos de exceção são ArgumentException , OutOfMemoryException e FormatException .

try 
 { 
   var parsedValue = Int32.Parse("abcde"); 
 } 
 // Only FormatExceptions will be caught in this catch block. 
 catch(FormatException exceptionVariable) 
 { 
    Console.WriteLine(exceptionVariable.Message); 
 } 

A variável declarada após o tipo de exceção conterá todos os dados da exceção e poderá ser usada dentro do bloco Catch .

Finalmente bloqueie

O bloco finally é sempre executado no final após os blocos Try e Catch . Esta seção é geralmente usada para quando algo deve acontecer no final, independentemente de uma exceção ser lançada ou não. Por exemplo, digamos que precisamos de uma variável para ser sempre re-inicializada de volta para um número específico depois de ter sido manipulada o tempo todo.

int initalValue = 12; 
 try 
 { 
    // Code which manipulates 'initialValue' 
 } 
 finally 
 { 
    Console.WriteLine("re-initalising value back to 12"); 
    initialValue = 12; 
 }