Có một quy tắc đơn giản: Nếu bạn không biết cách xử lý ngoại lệ, đừng bắt nó.
Chụp và trả lại danh sách trống hoặc danh sách trống sẽ là điều tồi tệ nhất bạn có thể làm vì sẽ khó khắc phục lỗi xảy ra hoặc thậm chí lỗi xảy ra. Nếu bạn làm điều này bạn sẽ có các nhà phát triển kéo tóc ra.
Ghi ngoại lệ và làm lại nó là throw e;
cũng không tốt vì bạn mất chồng ban đầu. Rethrowing sử dụng throw;
là OK đôi khi nếu bạn có dọn dẹp đặc biệt, bạn chỉ cần thực hiện nếu có lỗi. Thường thì đây không phải là trường hợp. Nếu bạn có dọn dẹp cần được thực hiện có hay không có lỗi, nó thuộc về mệnh đề cuối cùng.
Vì vậy, nói chung trừ khi có điều gì đó hợp lý bạn có thể làm để khôi phục từ lỗi, chỉ cần để cho ngoại lệ propogate cho người gọi. Đây là cách ngoại lệ được thiết kế để hoạt động.
Có một vài lần khi bạn có thể muốn bắt một ngoại lệ để thêm thông tin (ví dụ như đối với khai thác gỗ), trong trường hợp này, bạn nên đảm bảo rằng bạn sử dụng một InnerException
để tránh mất thông tin ban đầu:
try
{
foo(bar);
}
catch (Exception e)
{
throw new FooException("Foo failed for " + bar.ToString(), e);
}
nhưng nói chung tốt nhất là không nên làm điều này trừ khi bạn có lý do rất tốt. Làm điều này ngăn cản người dùng của bạn bắt được một loại ngoại lệ cụ thể - họ sẽ bắt ngoại lệ của bạn và sau đó họ cần phải chuyển sang loại InnerException. Không vui. Chỉ cần để người gọi thấy ngoại lệ ban đầu.
Nguồn
2009-12-29 11:09:12
Có vẻ như bạn chỉ nên xử lý ngoại lệ này trong lớp trình bày của mình - Ngoại lệ phải đặc biệt. Chỉ xử lý các ngoại lệ nếu bạn có thể theo một đường dẫn logic khác dựa trên ngoại lệ xảy ra. –