VieTopik
Tiếng HànTiếng AnhIT
  • Góc học tập
Tải app
  • Thư viện
  • Luyện thi
  • Cẩm nang
  • Góc học tập
C# CoreClass cơ bản
Bài 15/19
4 phút

enum

Nội dung bài · 5 mục
  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt

Đơn hàng chỉ có vài trạng thái: mới, đã thanh toán, đang giao, đã huỷ. Nếu lưu trạng thái bằng chuỗi, gõ nhầm "paid" thành "piad" thì compiler cũng không phát hiện. Với enum, bạn chọn giá trị theo tên trong một danh sách cố định, và gõ nhầm tên là lỗi compile.

Khái niệm

🎚️ enum: kiểu gồm một danh sách giá trị có tên cố định, mỗi tên ứng với một số nguyên.

Ví dụ

OrderStatus status = OrderStatus.Paid;

if (status == OrderStatus.Paid)
{
    Console.WriteLine("Chuẩn bị giao hàng");
}

Console.WriteLine(status);        // Paid
Console.WriteLine((int)status);   // 1

enum OrderStatus
{
    New,
    Paid,
    Shipping,
    Cancelled
}
  • Khai báo enum OrderStatus { ... }, dùng giá trị qua tên enum: OrderStatus.Paid.
  • Gõ sai tên như OrderStatus.Piad là lỗi compile ngay.
  • In ra thì được tên (Paid). Mỗi giá trị còn có một số nguyên đi kèm, đánh số từ 0: New là 0, Paid là 1.
  • enum là value type.

Thử ngay

Chép khai báo OrderStatus ở ví dụ trên, thay các dòng đầu bằng:

OrderStatus status = OrderStatus.Shipping;

switch (status)
{
    case OrderStatus.New:
        Console.WriteLine("Chờ thanh toán");
        break;
    case OrderStatus.Paid:
        Console.WriteLine("Chuẩn bị giao");
        break;
    case OrderStatus.Shipping:
        Console.WriteLine("Đang giao");
        break;
    default:
        Console.WriteLine("Đã huỷ");
        break;
}

Console.WriteLine((int)status);

Đoán trước khi chạy: dòng cuối in ra Shipping hay một con số?

Xem kết quả
Đang giao
2

Ép sang int thì được số thứ tự: New 0, Paid 1, Shipping 2.

Lỗi hay gặp

Dùng chuỗi cho giá trị cố định. Gõ nhầm vẫn chạy, chỉ là chạy sai.

// SAI — gõ nhầm "piad", điều kiện sai mà không ai biết
string status = "piad";
if (status == "paid")
{
    Console.WriteLine("Chuẩn bị giao hàng");
}
// ĐÚNG — gõ nhầm tên enum sẽ bị compiler bắt
OrderStatus status = OrderStatus.Paid;
if (status == OrderStatus.Paid)
{
    Console.WriteLine("Chuẩn bị giao hàng");
}

Tên enum đặt số nhiều. Một biến chỉ giữ một trạng thái, nên tên enum là số ít.

// SAI — đọc thành "một đơn có nhiều trạng thái"
enum OrderStatuses { New, Paid }
// ĐÚNG
enum OrderStatus { New, Paid }

Tóm tắt

  • enum là danh sách giá trị có tên cố định, như trạng thái đơn hàng.
  • Dùng qua tên enum: OrderStatus.Paid. Gõ sai tên là lỗi compile.
  • Mỗi giá trị có số nguyên đi kèm, mặc định đánh từ 0.
  • Dùng enum thay cho chuỗi khi giá trị nằm trong một danh sách cố định.

Tự kiểm tra

0/3 câu
Câu 1

enum Size { Small, Medium, Large } Console.WriteLine((int)Size.Large); In ra gì?

Câu 2

Trường nào nên dùng enum?

Câu 3

Vì sao enum an toàn hơn chuỗi khi lưu trạng thái đơn hàng?

staticLambda

Nội dung bài

  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt