Menu
CoddyTech

Các loại ngoại lệ

Thuộc phần Logic và luồng chương trình trong hành trình C# của Coddy. Bài học 24 trên 66.

Trong C#, các ngoại lệ được chia thành nhiều loại dựa trên lỗi mà chúng đại diện. Hiểu các loại này giúp bạn xử lý lỗi hiệu quả hơn.

Hãy cùng xem các loại ngoại lệ thường gặp:

Lớp cơ sở của tất cả các ngoại lệ là System.Exception.

try
{
    // Đoạn code có thể gây ra ngoại lệ (exception)
}
catch (Exception ex)
{
    // Xử lý mọi ngoại lệ
    Console.WriteLine(ex.Message);
}

Một số kiểu ngoại lệ phổ biến:

ArgumentException: Ngoại lệ này phát sinh khi một phương thức được gọi với đối số không hợp lệ.

string name = null;
if (name == null)
{
    throw new ArgumentException("Name cannot be null");
}

NullReferenceException: Được ném ra khi bạn cố truy cập một thành viên thông qua tham chiếu null.

string text = null;
// Dòng này sẽ gây ra ngoại lệ NullReferenceException
int length = text.Length;

IndexOutOfRangeException: Ngoại lệ này xảy ra khi chỉ số của mảng nằm ngoài phạm vi của mảng.

int[] numbers = { 1, 2, 3 };
// Dòng này sẽ gây ra ngoại lệ IndexOutOfRangeException
int value = numbers[5];

DivideByZeroException: Được ném ra khi chia một số nguyên cho 0.

int result = 10 / 0; // Dòng này sẽ gây ra ngoại lệ DivideByZeroException

Bạn có thể bắt các ngoại lệ cụ thể:

try
{
    int[] numbers = { 1, 2, 3 };
    int value = numbers[5];
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("Array index error: " + ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("General error: " + ex.Message);
}
challenge icon

Thử thách

Dễ

Tạo một phương thức có tên ProcessArray để:

  1. Nhận một mảng số nguyên và một chỉ số làm tham số
  2. Thử truy cập phần tử tại chỉ số được chỉ định
  3. Trả về giá trị của phần tử nếu thành công
  4. Nếu xảy ra IndexOutOfRangeException, hãy bắt ngoại lệ đó và trả về -1

Phương thức của bạn cần có chữ ký sau:

public static int ProcessArray(int[] array, int index)

Tự làm thử

using System;

class Program
{
    public static int ProcessArray(int[] array, int index)
    {
        // Viết code của bạn ở đây
        return 0;
    }

    static void Main(string[] args)
    {
        // Đọc mảng (array) đầu vào
        string input = Console.ReadLine();
        
        // Xóa dấu ngoặc nếu có
        if (input.StartsWith("[") && input.EndsWith("]"))
        {
            input = input.Substring(1, input.Length - 2);
        }
        
        string[] parts = input.Split(',');
        
        int[] array = new int[parts.Length];
        for (int i = 0; i < parts.Length; i++)
        {
            array[i] = int.Parse(parts[i].Trim());
        }
        
        // Đọc chỉ số (index) đầu vào
        int index = int.Parse(Console.ReadLine());
        
        int result = ProcessArray(array, index);
        Console.WriteLine(result);
    }
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch C# online