Fiquei com dúvida sobre a substituição do bloco try/catch/finally pelo bloco using, pois no código anterior nós tinhamos o catch() para pegar os erros que acontecessem durante a execução da leitura do arquivo ou leitura de linha, etc.
Por mais que fique um código mais limpo e além, como explicado, using se refere somente ao try/finally, ou seja, a aplicação será interrompida se houver qualquer exceção. Correto?
Nesse caso se torna realmente viável usar using ao invés do try/catch/finally?
Segue os dois códigos:
Se qualquer exceção ocorrer, poderá ser tratada no catch para haver um retorno amigável. (considerando mais exceções e não só a IOException)
LeitorDeArquivo leitor = null;
try
{
leitor = new LeitorDeArquivo("contas.txt");
leitor.LerProximaLinha();
leitor.LerProximaLinha();
leitor.LerProximaLinha();
}
catch (IOException ex)
{
Console.WriteLine("Exception do tipo IOException foi tratada.");
}
finally
{
if (leitor != null)
leitor.Dispose();
}
Se ocorrer uma exceção no construtor do LeitorDeArquivo ou em LerProximaLinha(), a aplicação será interrompida.
using (var leitor = new LeitorDeArquivo("contas.txt"))
{
leitor.LerProximaLinha();
leitor.LerProximaLinha();
leitor.LerProximaLinha();
}