Nếu câu lệnh bắt của bạn cần truy cập biến được khai báo trong câu lệnh sử dụng, thì bên trong là tùy chọn duy nhất của bạn.
Nếu câu lệnh bắt của bạn cần đối tượng được tham chiếu trong quá trình sử dụng trước khi nó được xử lý, thì bên trong là lựa chọn duy nhất của bạn.
Nếu câu lệnh bắt của bạn có hành động không xác định, như hiển thị thông báo cho người dùng và bạn muốn vứt bỏ tài nguyên trước khi điều đó xảy ra, thì bên ngoài là lựa chọn tốt nhất của bạn.
Bất cứ khi nào tôi có một scenerio tương tự như vậy, khối try-catch thường là trong một phương pháp khác tiếp tục lên ngăn xếp cuộc gọi từ việc sử dụng. Nó không phải là điển hình cho một phương pháp để biết cách xử lý các ngoại lệ xảy ra bên trong nó như thế này.
Vì vậy, đề xuất chung của tôi ở bên ngoài — cách bên ngoài.
private void saveButton_Click(object sender, EventArgs args)
{
try
{
SaveFile(myFile); // The using statement will appear somewhere in here.
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
}
Nguồn
2011-05-26 22:13:16
Chỉ cần một lưu ý: nên cẩn thận để ngoại lệ ngại duy nhất mà thực sự có thể được _handled_ (điều chỉnh), trừ trường hợp khai thác gỗ, hoặc gói chúng. –
Hãy ghi nhớ rằng '}' cuối cùng của câu lệnh 'using' có thể ném một ngoại lệ [như được nhắc tới ở đây] (https://msdn.microsoft.com/en-us/library/aa355056%28v=vs. 110% 29.aspx). –
TIL rằng trình gỡ rối (trong VS) sẽ không gọi phương thức vứt bỏ nếu bạn sử dụng khối mã đầu tiên. Bởi vì bản thân câu lệnh sử dụng có thể ném một ngoại lệ, nó giúp tôi sử dụng khối thứ hai để đảm bảo 'cuối cùng' được gọi là phương thức vứt bỏ. – ShooShoSha