Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Sử dụng try/catch/finally trong C#


Ngoại lệ (Exception) cung cấp cách chuyển điều khiển từ một phần chương trình sang phần khác. Xử lý ngoại lệ C# xây dựng trên 4 từ khóa: try, catch, finally, throw.

  • try: Khối mã có thể ném ngoại lệ. Theo sau bởi một hoặc nhiều catch.
  • catch: Xử lý ngoại lệ tại nơi mong muốn. Chỉ định kiểu ngoại lệ bắt.
  • finally: Luôn thực thi (có hoặc không có ngoại lệ). Dùng cho cleanup.
  • throw: Ném ngoại lệ thủ công.

Ví dụ

using System;

namespace Demo
{
    class DivNumbers
    {
        int result;
        
        public DivNumbers()
        {
            result = 0;
        }
        
        public void Division(int num1, int num2)
        {
            try
            {
                result = num1 / num2;
            }
            catch (DivideByZeroException e)
            {
                Console.WriteLine("Ngoại lệ chia cho 0: {0}", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Ngoại lệ khác: {0}", e.Message);
            }
            finally
            {
                Console.WriteLine("Kết quả: {0}", result);
            }
        }
        
        static void Main(string[] args)
        {
            DivNumbers d = new DivNumbers();
            d.Division(25, 0); // Gây DivideByZeroException
            Console.ReadKey();
        }
    }
}

Kết quả

Ngoại lệ chia cho 0: Attempted to divide by zero.
Kết quả: 0

Các nguyên tắc tốt

  1. Bắt ngoại lệ cụ thể trước, chung sau (DivideByZeroException trước Exception)
  2. Luôn dùng finally cho tài nguyên (file, connection, stream)
  3. Tránh catch rỗng (catch { }) - che giấu lỗi
  4. Dùng using cho IDisposable (tự động gọi Dispose trong finally)

Ví dụ using (thay try/finally)

using (var fs = new FileStream("file.txt", FileMode.Open))
using (var sr = new StreamReader(fs))
{
    string content = sr.ReadToEnd();
} // Tự động dispose, ngay cả khi có exception