CẬP NHẬT: giả sử C# 6, cơ hội là trường hợp của bạn có thể được thể hiện dưới dạng bộ lọc ngoại lệ. Đây là phương pháp lý tưởng từ góc độ hiệu suất giả định yêu cầu của bạn có thể được thể hiện bằng thuật ngữ của nó, ví dụ:
try
{
}
catch (Web2PDFException ex) when (ex.Code == 52)
{
}
Giả sử C# < 6, hiệu quả nhất là để bắt một cụ Exception
loại và đừng xử lý trên cơ sở đó. Bất kỳ nhận tất cả xử lý có thể được thực hiện riêng rẽ
try
{
}
catch (Web2PDFException ex)
{
}
hoặc
try
{
}
catch (Web2PDFException ex)
{
}
catch (Exception ex)
{
}
hoặc (nếu bạn cần phải viết một handler chung - mà nói chung là một ý tưởng tồi, nhưng nếu bạn chắc chắn đó là tốt nhất cho bạn, bạn chắc chắn):
if(err is Web2PDFException)
{
}
hoặc (trong một số trường hợp nếu bạn cần phải làm một số hệ thống phân cấp thứ loại phức tạp hơn mà không thể được thể hiện với is
)
if(err.GetType().IsAssignableFrom(typeof(Web2PDFException)))
{
}
hoặc chuyển sang VB.NET hoặc F # và sử dụng
is
hoặc
Type.IsAssignableFrom
trong Filters Exception
Nguồn
2009-11-26 09:36:58
if (err là Web2PDFException) là tôi cần :) – Tomas
Để sử dụng " là "nhà điều hành anh ta không cần phải chuyển sang VB.NET –
@BeowulfOF: Tôi biết, nhưng nếu anh ta chỉ cố gắng lọc dựa trên các loại - tức là một số loại đánh bắt có điều kiện, v.v., có thể hữu ích khi sử dụng là * trong một bộ lọc ngoại lệ hơn là một khối catch * - nó có thể là một cách tiếp cận hoạt động. Đề nghị ban đầu của tôi (và nó vẫn còn trong câu trả lời) là một trong khối catch. Điểm mấu chốt ở đây là cho rằng sử dụng 'is' thường là một mùi hôi, chúng ta cũng có thể có một danh sách các giải pháp khả thi và để Tomas chọn những gì phù hợp nhất với anh ấy trong bối cảnh cụ thể của anh ấy. Nhưng có, nó không chắc. –