enum
Nội dung bài · 5 mục
- 1.Khái niệm
- 2.Ví dụ
- 3.Thử ngay
- 4.Lỗi hay gặp
- 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.Piadlà 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:Newlà 0,Paidlà 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âuenum Size { Small, Medium, Large } Console.WriteLine((int)Size.Large); In ra gì?
Trường nào nên dùng enum?
Vì sao enum an toàn hơn chuỗi khi lưu trạng thái đơn hàng?