Hoàn toàn có thể chấp nhận có nhiều khối catch của các loại khác nhau. Tuy nhiên, hành vi là khối ứng cử viên đầu tiên xử lý ngoại lệ.
Nó sẽ không nhập BOTH khối catch. Khối catch đầu tiên phù hợp với loại ngoại lệ sẽ xử lý ngoại lệ cụ thể đó và không có ngoại lệ nào khác, ngay cả khi nó được xử lý lại trong trình xử lý. Bất kỳ cái nào tiếp theo sẽ bị bỏ qua khi một ngoại lệ đi vào một khối catch.
Để có một ngoại lệ bị bắt trong cả hai khối, bạn sẽ cần một trong hai khối tổ như vậy:
try
{
try
{
// Do something that throws ArithmeticException
}
catch(ArithmeticException arithException)
{
// This handles the thrown exception....
throw; // Rethrow so the outer handler sees it too
}
}
catch (Exception e)
{
// This gets hit as well, now, since the "inner" block rethrew the exception
}
Ngoài ra, bạn có thể lọc trong xử lý ngoại lệ chung chung dựa trên loại cụ thể của ngoại lệ.
Nguồn
2010-10-27 16:33:14
Nesting hoạt động ok đối với các cấu trúc phân cấp đơn giản, một cấp nhưng có thể rất xấu nếu bạn đã chia sẻ mã cần chạy cho một số trường hợp ngoại lệ khác nhau. Đây không phải là một bất đồng với cách tiếp cận này, nhưng một quan sát rằng nó không phải lúc nào cũng thích hợp. – tvanfosson
@tvanfosson: Vâng, đó là lý do tại sao tôi cũng đã thêm tùy chọn lọc. Tùy chọn của bạn cũng rất đẹp. –