Я видел, как люди говорят, что плохая форма использовать 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 (в этом случае код очистки в конце будет работать, но код после try..catch не будет).
В противном случае, что особенно важно в конце?