C# Enum(Đếm) với ví dụ
⚡ Tóm tắt thông minh
Trong C#, kiểu liệt kê định nghĩa một tập hợp các giá trị nguyên không đổi được đặt tên, chẳng hạn như các ngày trong tuần, giúp mã dễ đọc và dễ bảo trì hơn. Từ khóa `enum` khai báo các hằng số cố định này một lần để có thể sử dụng lại trong toàn bộ chương trình.

Bảng liệt kê C#
Một bảng liệt kê được sử dụng trong bất kỳ ngôn ngữ lập trình nào để xác định một tập hợp các giá trị không đổi. Ví dụ: các ngày trong tuần có thể được định nghĩa dưới dạng bảng liệt kê và được sử dụng ở bất kỳ đâu trong chương trình. Trong C#, phép liệt kê được xác định với sự trợ giúp của từ khóa 'enum'.
Hãy xem một ví dụ về cách chúng ta có thể sử dụng từ khóa 'enum'.
Trong ví dụ của chúng tôi, chúng tôi sẽ xác định một bảng liệt kê gọi là ngày, sẽ được sử dụng để lưu trữ các ngày trong tuần. Đối với mỗi ví dụ, chúng tôi sẽ chỉ sửa đổi hàm chính trong tệp Program.cs của mình.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat}; static void Main(string[] args) { Console.Write(Days.Sun); Console.ReadKey(); } } }
Code Giải trình:-
- 'enum' loại dữ liệu được chỉ định để khai báo một bảng liệt kê. Tên của bảng liệt kê là Ngày. Tất cả các ngày trong tuần được chỉ định làm giá trị của bảng liệt kê.
- Cuối cùng, hàm console.write được sử dụng để hiển thị một trong các giá trị của bảng liệt kê.
Nếu mã trên được nhập đúng và chương trình được thực thi thành công, kết quả sau sẽ được hiển thị.
Đầu ra:
Từ kết quả đầu ra, bạn có thể thấy giá trị 'Mặt trời' của bảng liệt kê được hiển thị trong bảng điều khiển.
Tại sao nên sử dụng Enum trong C#?
Kiểu liệt kê (enum) giúp chương trình dễ đọc hơn, an toàn hơn và dễ bảo trì hơn. Thay vì rải rác các số không giải thích được, đôi khi được gọi là số ma thuật, trong toàn bộ mã, kiểu liệt kê gán cho mỗi giá trị một tên mô tả rõ ràng mục đích của nó.
- Khả năng đọc: Một cái tên như Days.Fri rõ ràng hơn nhiều so với con số 5, vì vậy bất kỳ ai đọc mã đều hiểu ý nghĩa ngay lập tức.
- Loại an toàn: Một biến được khai báo với kiểu liệt kê chỉ có thể chứa một trong các thành viên được định nghĩa, điều này ngăn chặn việc truyền các giá trị không hợp lệ.ping .
- Khả năng bảo trì: Các hằng số liên quan cùng tồn tại ở một vị trí duy nhất, vì vậy việc thêm hoặc đổi tên một giá trị sẽ cập nhật toàn bộ chương trình một cách nhất quán.
- Liên kết dữ liệu: Các framework như WPF và ASP.NET có thể liên kết một kiểu liệt kê (enum) với một danh sách thả xuống, điều này làm cho kiểu liệt kê trở nên hữu ích trong việc xây dựng giao diện người dùng.
Vì trình biên dịch kiểm tra mọi phép gán so với các thành viên được cho phép, kiểu liệt kê (enum) cũng giúp phát hiện lỗi sớm, trước khi chương trình chạy.
Gán giá trị tùy chỉnh cho kiểu liệt kê C#
Theo mặc định, C# gán giá trị 0 cho thành viên đầu tiên của kiểu liệt kê và tăng mỗi thành viên tiếp theo lên một. Trong kiểu liệt kê Days ở trên, Sun bằng 0, Mon bằng 1 và Sat bằng 6. Bạn có thể ghi đè các giá trị mặc định này bằng cách gán các số cụ thể.
- Giá trị cụ thể: Việc viết enum Level {Low = 1, Medium = 5, High = 10} sẽ gán cho mỗi thành viên một số được chọn thay vì chuỗi số mặc định.
- Bài tập một phần: Nếu bạn chỉ gán giá trị cho một số thành viên, trình biên dịch sẽ tiếp tục đánh số từ giá trị được gán cuối cùng cho các thành viên tiếp theo.
- Loại cơ bản: Theo mặc định, kiểu liệt kê (enum) lưu trữ các thành viên dưới dạng kiểu int, nhưng bạn có thể dựa trên kiểu byte, short hoặc long để tiết kiệm bộ nhớ hoặc mở rộng phạm vi.
Các giá trị tùy chỉnh rất hữu ích khi các số phải khớp với một hệ thống bên ngoài, chẳng hạn như mã cơ sở dữ liệu hoặc hằng số giao thức, để kiểu liệt kê phản ánh chính xác dữ liệu thực.
Cách chuyển đổi kiểu liệt kê (enum) trong C# sang kiểu int, string và flags
C# thường xuyên cần chuyển đổi giá trị của kiểu liệt kê (enum) sang một dạng khác, chẳng hạn như lưu trữ nó dưới dạng số hoặc đọc lại từ văn bản. Các chuyển đổi này được thực hiện theo một vài cách chuẩn.
- Chuyển đổi Enum sang int: Việc ép kiểu tường minh như (int)Days.Wed sẽ trả về số nguyên cơ bản, điều này hữu ích cho việc lưu trữ hoặc tính toán.
- Chuyển đổi số nguyên sang kiểu liệt kê: Việc ép kiểu theo hướng ngược lại, ví dụ như (Days)3, sẽ biến một số trở lại thành thành viên enum tương ứng.
- Chuyển đổi chuỗi thành kiểu liệt kê: Enum.Parse và Enum.TryParse (an toàn hơn) chuyển đổi một tên như “Fri” thành thành viên Days.Fri mà không báo lỗi khi gặp văn bản không hợp lệ.
- Chuyển đổi Enum sang chuỗi: Việc gọi phương thức ToString trên bất kỳ thành viên nào sẽ trả về tên của thành viên đó, vì vậy Days.Sun.ToString() sẽ trả về “Sun” để hiển thị hoặc ghi nhật ký.
- Liệt kê các thành viên: Enum.GetValues và Enum.GetNames trả về mọi giá trị hoặc tên, điều này hữu ích khi điền vào menu hoặc xác thực dữ liệu đầu vào.
Khi một kiểu liệt kê (enum) cần biểu diễn một tổ hợp các lựa chọn thay vì chỉ một lựa chọn duy nhất, hãy áp dụng thuộc tính Flags và gán cho mỗi thành viên một lũy thừa của hai, chẳng hạn như 1, 2, 4 và 8. Sau đó, bạn có thể kết hợp các thành viên bằng toán tử OR bitwise và kiểm tra một tùy chọn cụ thể bằng phương thức HasFlag.
Các kỹ thuật chuyển đổi này cho phép kiểu liệt kê chuyển đổi mượt mà giữa các tên dễ đọc, các số được lưu trữ và các tập hợp cờ kết hợp, giữ choping Phần còn lại của chương trình vừa an toàn về kiểu dữ liệu vừa dễ hiểu.


