Trực tiếp từ MSDN - Exception Handling:
xem xét bắt ngoại lệ cụ thể khi bạn hiểu tại sao nó sẽ được ném vào một bối cảnh nhất định.
Bạn chỉ nên bắt những ngoại lệ mà bạn có thể khôi phục. Ví dụ: FileNotFoundException
kết quả từ nỗ lực mở tệp không tồn tại có thể được ứng dụng xử lý vì ứng dụng có thể truyền đạt sự cố cho người dùng và cho phép người dùng chỉ định tên tệp khác hoặc tạo tệp. Yêu cầu mở tệp không tạo ra ExecutionEngineException
không được xử lý vì nguyên nhân cơ bản của ngoại lệ không thể được biết với bất kỳ mức độ chắc chắn nào và ứng dụng không thể đảm bảo rằng việc tiếp tục thực hiện là an toàn.
Đừng lạm dụng catch
, như ném một ngoại lệ từ bên trong một khối catch sẽ thiết lập lại stack trace và gây ra mất thông tin gỡ lỗi quan trọng, vì một lần nữa MSDN gợi ý:
Đừng lạm dụng bắt lấy. Các ngoại lệ nên thường được phép phổ biến ngăn xếp cuộc gọi.
Ghi lại các ngoại lệ mà bạn không thể xử lý hợp pháp thông tin gỡ lỗi quan trọng.
Cuối cùng, bắt một ngoại lệ nên để xử lý ngoại lệ cụ thể mà bạn mong đợi xảy ra dưới kịch bản phổ biến nhất định mà bạn muốn đăng nhập hoặc có một số hành vi cụ thể khi ngoại lệ bắt, nếu không chỉ đơn giản là throw
nó đi, như số Eric Lippert
tự giới thiệu trên blog của mình (xem Too much reuse
bài viết).
try {
...
} catch (Exception ex) {
throw; // This does not reset the stack trace.
}
Thay vì:
try {
...
} catch (Exception ex) {
throw ex; // This does reset the stack trace.
}
Cuối cùng, một Exception
không cần không bắt buộc để cung cấp một số đặc trưng như tính chất bổ sung hoặc các phương pháp hoặc bất cứ điều gì, nó là tên của nó mà nói ra cho bản thân, cho phép bạn để lọc bắt của bạn khi một loại ngoại lệ cụ thể.
EDIT # 1
Một liên kết thú vị về xử lý trên Eric Lippert blog lỗi: Vexing exceptions.
Nguồn
2010-10-20 17:51:07
Vì bạn có thể bắt ngoại lệ cụ thể, bạn có thể có nhiều câu lệnh bắt trong khối try ... catch. – Nate
"Các lớp con tiêu chuẩn kế thừa từ lớp Ngoại lệ cơ sở có bao giờ có các phương thức khác nhau mà cơ sở không?": Có, nhưng hầu hết các câu trả lời đều không tập trung vào điểm này. Kiểm tra 'WebException' cho một ví dụ đơn giản về điều này: http://msdn.microsoft.com/en-us/library/system.net.webexception.aspx. Cụ thể, lưu ý thuộc tính 'Response'. – Brian