Vi pessoas dizerem que é uma má forma usar catch sem argumentos, especialmente se esse catch não fizer nada:
StreamReader reader=new StreamReader("myfile.txt");
try
{
int i = 5 / 0;
}
catch // No args, so it will catch any exception
{}
reader.Close();
No entanto, isso é considerado uma boa forma:
StreamReader reader=new StreamReader("myfile.txt");
try
{
int i = 5 / 0;
}
finally // Will execute despite any exception
{
reader.Close();
}
Até onde eu sei, a única diferença entre colocar o código de limpeza em um bloco finalmente e colocar o código de limpeza após os blocos try..catch é se você tiver instruções de retorno no bloco try (nesse caso, o código de limpeza finalmente será executar, mas o código após o try..catch não será).
Caso contrário, o que há de tão especial finalmente?