Tôi đã thấy mọi người nói rằng đó là hình thức xấu khi sử dụng sản phẩm khai thác mà không có đối số, đặc biệt là nếu sản phẩm khai thác đó không làm gì cả:
StreamReader reader=new StreamReader("myfile.txt");
try
{
int i = 5 / 0;
}
catch // No args, so it will catch any exception
{}
reader.Close();
Tuy nhiên, đây được coi là hình thức tốt:
StreamReader reader=new StreamReader("myfile.txt");
try
{
int i = 5 / 0;
}
finally // Will execute despite any exception
{
reader.Close();
}
Theo như tôi có thể nói, sự khác biệt duy nhất giữa việc đặt mã dọn dẹp vào khối cuối cùng và đặt mã dọn dẹp sau khối try..catch là nếu bạn có câu lệnh trả về trong khối thử của mình (trong trường hợp đó, mã dọn dẹp cuối cùng sẽ chạy, nhưng mã sau khi thử..catch sẽ không).
Nếu không, cuối cùng có gì đặc biệt?