Câu hỏi phỏng vấn C#
Câu hỏi

Có cách nào để bắt nhiều exception cùng một lúc và không phải duplicate code trong C# không?

Câu trả lời

Trong C#, bạn có thể bắt nhiều exception cùng một lúc mà không cần phải duplicate code bằng cách sử dụng cú pháp catch nhiều lần sau một khối try. Tuy nhiên, nếu logic xử lý cho các exception này giống nhau, bạn có thể muốn tìm cách để không phải viết lại cùng một đoạn code. Một cách để làm điều này là sử dụng một khối catch duy nhất và kiểm tra kiểu của exception bằng cách sử dụng từ khóa when trong C# 6 trở lên, hoặc sử dụng một phương thức xử lý chung cho tất cả các exception mà bạn muốn bắt.

Sử dụng từ khóa when

Từ C# 6 trở lên, bạn có thể sử dụng từ khóa when để lọc các exception dựa trên điều kiện cụ thể, cho phép bạn xử lý nhiều loại exception khác nhau trong cùng một khối catch mà không cần phải duplicate code.

csharp Copy
try
{
    // Code có thể phát sinh exception
}
catch (Exception ex) when (ex is IOException || ex is UnauthorizedAccessException)
{
    // Xử lý cho cả IOException và UnauthorizedAccessException
    Console.WriteLine("Lỗi truy cập file.");
}

Sử dụng một phương thức xử lý chung

Một cách khác để tránh duplicate code khi bắt nhiều exception là định nghĩa một phương thức xử lý chung và gọi phương thức này trong các khối catch khác nhau.

csharp Copy
try
{
    // Code có thể phát sinh exception
}
catch (IOException ex)
{
    HandleException(ex);
}
catch (UnauthorizedAccessException ex)
{
    HandleException(ex);
}

void HandleException(Exception ex)
{
    // Logic xử lý chung cho các exception
    Console.WriteLine($"Lỗi: {ex.Message}");
}

Cả hai cách trên đều giúp bạn giảm thiểu việc phải viết lại code khi cần xử lý nhiều loại exception khác nhau trong C#. Sử dụng từ khóa when giúp code gọn gàng hơn nhưng cách tiếp cận với phương thức xử lý chung cho phép bạn có thêm linh hoạt trong việc xử lý exception.

middle

middle

Gợi ý câu hỏi phỏng vấn

middle

Property Accessors trong C# là gì?

middle

Công dụng của using trong C# là gì?

middle

Trong C# this có thể được sử dụng trong một phương thức static không?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào