C# Enums: Hướng dẫn thân thiện về các kiểu Enumerated

Xin chào các bạn, những siêu sao lập trình tương lai! Hôm nay, chúng ta sẽ cùng lặn vào thế giới kỳ diệu của các enum trong C#. Đừng lo lắng nếu bạn chưa từng nghe về chúng trước đây - đến cuối bài hướng dẫn này, bạn sẽ trở thành một chuyên gia về enum! Hãy cùng bắt đầu hành trình thú vị này.

C# - Enums

Enums là gì?

Hãy tưởng tượng bạn đang tạo một trò chơi mà trong đó người chơi có thể chọn các lớp nhân vật khác nhau. Bạn có thể có chiến binh, pháp sư, cung thủ và pháp sư chữa bệnh. Bạn sẽ thể hiện các tùy chọn này trong mã của mình như thế nào? Đây là nơi mà enum đến để cứu giúp!

Một enum (viết tắt của enumeration) là một kiểu đặc biệt trong C# cho phép bạn định nghĩa một bộ các hằng số có tên. Nó giống như tạo một kiểu tùy chỉnh với một bộ các giá trị cố định. Đáng kinh ngạc phải không?

Tại sao sử dụng Enums?

  1. Chúng làm cho mã của bạn dễ đọc hơn.
  2. Chúng giúp ngăn ngừa lỗi bằng cách giới hạn các lựa chọn trong một bộ định trước.
  3. Chúng rất tốt cho việc biểu diễn các danh mục hoặc tùy chọn.

Khai báo một Enum

Hãy bắt đầu với những điều cơ bản. Dưới đây là cách bạn khai báo một enum:

enum CharacterClass
{
Warrior,
Mage,
Archer,
Healer
}

Trong ví dụ này, chúng ta đã tạo một enum gọi là CharacterClass với bốn giá trị có thể. Mặc định, C# gán các giá trị số nguyên cho mỗi thành viên enum, bắt đầu từ 0.

Sử dụng Enums trong mã của bạn

Bây giờ chúng ta đã khai báo enum của mình, hãy xem cách chúng ta có thể sử dụng nó trong mã:

class Program
{
static void Main(string[] args)
{
CharacterClass myClass = CharacterClass.Warrior;
Console.WriteLine($"Lớp nhân vật của tôi là: {myClass}");
}
}

Khi bạn chạy đoạn mã này, nó sẽ输出:

Lớp nhân vật của tôi là: Warrior

Đó có phải không? Chúng ta vừa tạo một biến kiểu CharacterClass và gán nó giá trị Warrior. Đó như thể cấp cho nhân vật của bạn một thẻ nhận dạng!

Giá trị Enum và Casting

Nhớ lại khi tôi đề cập rằng các enum được gán các giá trị số nguyên? Hãy cùng tìm hiểu sâu hơn một chút:

Console.WriteLine($"Giá trị của Warrior: {(int)CharacterClass.Warrior}");
Console.WriteLine($"Giá trị của Mage: {(int)CharacterClass.Mage}");
Console.WriteLine($"Giá trị của Archer: {(int)CharacterClass.Archer}");
Console.WriteLine($"Giá trị của Healer: {(int)CharacterClass.Healer}");

Điều này sẽ output:

Giá trị của Warrior: 0
Giá trị của Mage: 1
Giá trị của Archer: 2
Giá trị của Healer: 3

Chúng ta đang sử dụng casting ở đây (đó là phần (int)) để chuyển đổi các giá trị enum thành số nguyên. Nó như thể nhìn qua màn để xem cách C# tổ chức enum của chúng ta!

Giá trị tùy chỉnh Enum

Nhưng đợi đã, còn nhiều hơn nữa! Nếu bạn muốn gán các giá trị cụ thể cho các thành viên enum của mình? Bạn cũng có thể làm điều đó:

enum CharacterClass
{
Warrior = 1,
Mage = 5,
Archer = 10,
Healer = 15
}

Bây giờ, nếu chúng ta chạy đoạn mã trước để in các giá trị, chúng ta sẽ nhận được:

Giá trị của Warrior: 1
Giá trị của Mage: 5
Giá trị của Archer: 10
Giá trị của Healer: 15

Điều này có thể hữu ích khi bạn cần các giá trị enum của mình tương ứng với các số cụ thể trong trò chơi hoặc ứng dụng của bạn.

Enums và Switch Statements

Enums và switch statements như bánh mì và bơ - chúng просто работать вместе! Dưới đây là một ví dụ:

static void DescribeClass(CharacterClass characterClass)
{
switch (characterClass)
{
case CharacterClass.Warrior:
Console.WriteLine("Bạn là một chiến binh dũng cảm, mạnh mẽ trong chiến đấu!");
break;
case CharacterClass.Mage:
Console.WriteLine("Bạn là một pháp sư thông thái, chủ nhân của các nghệ thuật huyền bí!");
break;
case CharacterClass.Archer:
Console.WriteLine("Bạn là một cung thủ tài năng, chết người từ xa!");
break;
case CharacterClass.Healer:
Console.WriteLine("Bạn là một pháp sư chữa bệnh nhân hậu, người giữ gìn sự sống!");
break;
default:
Console.WriteLine("Lớp không rõ. Bạn có phải là một lớp bí mật?");
break;
}
}

Bây giờ chúng ta có thể sử dụng hàm này như sau:

DescribeClass(CharacterClass.Mage);

Và nó sẽ output:

Bạn là một pháp sư thông thái, chủ nhân của các nghệ thuật huyền bí!

Phân tích Enums

Đôi khi, bạn có thể cần chuyển đổi một chuỗi thành giá trị enum. Ví dụ, nếu một người chơi nhập lớp nhân vật của họ. Dưới đây là cách bạn có thể làm điều đó:

string input = "Archer";
if (Enum.TryParse(input, out CharacterClass playerClass))
{
Console.WriteLine($"Bạn đã chọn trở thành một {playerClass}!");
}
else
{
Console.WriteLine("Đó không phải là một lớp nhân vật hợp lệ!");
}

Đoạn mã này sẽ an toàn thử chuyển đổi chuỗi "Archer" thành enum CharacterClass. Nếu thành công, nó sẽ output:

Bạn đã chọn trở thành một Archer!

Phương thức Enum

Hãy kết thúc với bảng các phương thức enum hữu ích:

Phương thức Mô tả Ví dụ
Enum.GetNames() Lấy một mảng các tên của các hằng số trong một enum string[] names = Enum.GetNames(typeof(CharacterClass));
Enum.GetValues() Trả về một mảng các giá trị của các hằng số trong một enum CharacterClass[] values = (CharacterClass[])Enum.GetValues(typeof(CharacterClass));
Enum.IsDefined() Trả về một boolean cho biết có một hằng số với giá trị xác định trong một enum bool isDefined = Enum.IsDefined(typeof(CharacterClass), "Warrior");
Enum.Parse() Chuyển đổi biểu diễn chuỗi của tên hoặc giá trị số nguyên của một hoặc nhiều hằng số enum thành một đối tượng enum tương đương CharacterClass parsedEnum = (CharacterClass)Enum.Parse(typeof(CharacterClass), "Mage");
Enum.TryParse() Chuyển đổi biểu diễn chuỗi của tên hoặc giá trị số nguyên của một hoặc nhiều hằng số enum thành một đối tượng enum tương đương. Giá trị trả về cho biết việc chuyển đổi có thành công hay không bool success = Enum.TryParse("Healer", out CharacterClass result);

Và thế là xong, các em học sinh yêu quý! Bạn đã nâng cấp kỹ năng C# của mình bằng cách thành thạo enum. Nhớ rằng, thực hành làm nên hoàn hảo, vì vậy hãy thử tạo các enum của riêng bạn cho các tình huống khác nhau. Có thể bạn sẽ tạo một enum cho các ngày trong tuần, hoặc topping pizza, hoặc thậm chí là các ngôn ngữ lập trình yêu thích của bạn!

Tiếp tục lập trình, tiếp tục học hỏi, và quan trọng nhất, hãy vui vẻ! Đến gặp lại, mong mã của bạn không có lỗi và thời gian biên dịch nhanh chóng!

Credits: Image by storyset