Я видел, как люди говорили, что использовать catch без аргументов - плохая форма, особенно если эта catch ничего не делает:
StreamReader reader=new StreamReader("myfile.txt");
try
{
int i = 5 / 0;
}
catch // No args, so it will catch any exception
{}
reader.Close();
Тем не менее, это считается хорошей формой:
StreamReader reader=new StreamReader("myfile.txt");
try
{
int i = 5 / 0;
}
finally // Will execute despite any exception
{
reader.Close();
}
Насколько я могу судить, единственное различие между помещением кода очистки в блок finally и размещением кода очистки после блоков try..catch состоит в том, что в вашем блоке try есть операторы возврата (в этом случае код очистки в finally будет запустить, но кода после попытки .. поймать не буду).
Иначе, что такого особенного в конце концов?