Nói chung, bạn không nên bắt được bất kỳ ngoại lệ nào.
Tôi biết điều này có vẻ kỳ lạ, nhưng thực tế là bạn chỉ nên bắt ngoại lệ bạn thực sự có thể làm điều gì đó và bạn thường không thể làm gì về ngoại lệ.
"ngoại lệ" đối với quy tắc này phải làm với ý nghĩa của việc "xử lý" ngoại lệ. Trong một số ứng dụng, "xử lý" ngoại lệ có nghĩa là đăng nhập nó. Trong những trường hợp khác (ví dụ, ASP.NET), tốt hơn là không phải là xử lý ngoại lệ, vì khung (ASP.NET Health Monitoring trong trường hợp này) sẽ ghi lại nó cho bạn.
Trong mã hướng sự kiện, như Windows Forms, tôi thấy cần thiết để bắt ngoại lệ trong trình xử lý sự kiện. Ít nhất là trong các phiên bản trước của .NET, cho phép ngoại lệ lan truyền ra ngoài, ví dụ, một sự kiện nhấn nút tạo ra các kết quả khó chịu. Tôi thường bắt ngoại lệ và hiển thị nó trong một hộp thoại.
Trong một ứng dụng đa tầng, người ta có thể bắt ngoại lệ trên ranh giới tầng, sau đó rethrow một, tầng cụ thể ngoại lệ mới:
try
{
// ...
}
catch (Exception ex)
{
throw new TierException("Some message", ex);
}
Một trường hợp sử dụng là để bắt ngoại lệ, sau đó ném một ngoại lệ mới với nhiều thông tin trong đó:
public int GetValueFromConfigurationFile(...)
{
const string configFileName = "...";
try
{
// ...
}
catch (FileNotFoundException fEx)
{
throw new InvalidOperationException(
String.Format("Can't find configuration file {0}", configFileName),
fEx);
}
}
trong trường hợp này, bạn đang bắt một ngoại lệ cụ thể (FileNotFoundException
), và cung cấp thông tin người gọi của bạn họ có thể không nếu không biết: rằng tập tin không tìm thấy là một tập tin cấu hình.
Thông điệp chung là: - Chỉ bắt ngoại lệ bạn biết làm thế nào để xử lý - Catch the ngoại lệ cụ thể nhất có thể - Luôn luôn bao gồm các ngoại lệ bên trong khi tạo ra một ngoại lệ mới, để duy trì chuỗi các trường hợp ngoại lệ - Để rethrow ngoại lệ hiện tại, sử dụng throw;
, không phải throw ex;
Có thêm một số khác và tôi sẽ cố gắng tìm cho bạn tham chiếu từ Nguyên tắc thiết kế khung của Microsoft.
P.S. Nếu ai đó có thể tìm thấy câu hỏi này là bản sao của, hãy đóng một bản sao. Tôi không ngại mất bất kỳ đại diện nào từ việc này. Tôi không thể tìm thấy bản sao.
tôi nên có chỉ đăng các liên kết đến các "ngoại lệ xử lý" tag wiki, nơi nó nói:
Tuy nhiên, để xử lý ngoại lệ trong bối cảnh các chương trình .NET, xem "Design Guidelines for Exceptions ".
Bạn có thể tìm thấy câu trả lời này và các liên kết trong đó có liên quan: http://stackoverflow.com/a/7152374/625332 – Dmitry