Resumo : neste tutorial, você aprenderá como usar a try...catch...finally
instrução C# para lidar com exceções e limpar recursos.
Introdução à instrução C# try…catch…finalmente
A try...catch
declaração tem uma finally
cláusula opcional como segue:
try
{
// execute statement
}
catch (Exception e)
{
// handle execeptions
}
finally
{
// always execute
}
Linguagem de código: PHP ( php )
Quando uma try...catch
instrução contém um finally
, ela sempre executa o finally
bloco, independentemente de ocorrer uma exceção dentro do try
bloco ou não:
- Se nenhuma exceção ocorrer dentro do
try
bloco, o controle pula qualquercatch
bloco e vai para ofinally
bloco. - Se ocorrer uma exceção dentro do
try
bloco, ascatch
cláusulas apropriadas serão executadas seguidas pela execução dofinally
bloco.
É importante observar que mesmo que a try
cláusula possua uma return
instrução, o finally
bloco sempre será executado.
Além disso, o finally
bloco não pode conter uma return
instrução. Caso contrário, o programa não será compilado.
Na prática, você costuma usar o finally
bloco para limpar os recursos, como fechar um fluxo ou uma conexão de banco de dados.
Exemplo de instrução C# try…catch…finally
Vejamos alguns exemplos de uso da try...catch..finally
declaração.
1) Usando o exemplo de instrução C# try…catch…finally
O programa a seguir lê um arquivo de texto linha por linha e exibe o conteúdo do arquivo no console. Ele usa a try...catch...finally
instrução para lidar com exceções:
StreamReader? reader = null;
try
{
reader = new StreamReader(@"C:\csharptutorial\test.txt");
string? line = reader.ReadLine();
while (line != null)
{
Console.WriteLine(line);
line = reader.ReadLine();
}
}
catch (Exception e)
{
Console.WriteLine($"Error: {e.Message}");
}
finally
{
//close the file
if (reader != null) reader.Close();
}
Linguagem de código: PHP ( php )
Neste exemplo, o finally
bloco fecha o leitor de fluxo, independentemente de ocorrer uma exceção dentro do try
bloco ou não.
2) Usando a instrução C# try…catch…finally com a instrução return
O seguinte ilustra o fluxo de controle do programa ao usar uma return
instrução dentro do try
bloco:
int Test()
{
int result = 100;
try
{
return result;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
result = 200;
Console.WriteLine("Execute the finally block...");
}
// these statement won't execute
Console.WriteLine("Bye!");
return result;
}
Console.WriteLine(Test());
Linguagem de código: PHP ( php )
Saída:
Execute the finally block...
100
Linguagem de código: JavaScript ( javascript )
Neste exemplo, o programa retorna a result
variável do try
bloco. O programa também executa o finally
bloco. No entanto, termina imediatamente, desde que chegue ao final do finally
bloco.
Resumo
- Use o
C# try...catch...finally
bloco para lidar com exceções e limpar os recursos. - O
finally
bloco sempre é executado independentemente de ocorrer uma exceção notry
bloco ou não.