C# Enum (การแจงนับ) พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
ในภาษา C# การใช้ enum จะกำหนดค่าคงที่จำนวนเต็มชุดหนึ่งที่มีชื่อ เช่น วันในสัปดาห์ ทำให้โค้ดอ่านและบำรุงรักษาได้ง่ายขึ้น คำหลัก enum จะประกาศค่าคงที่เหล่านี้เพียงครั้งเดียวเพื่อนำไปใช้ซ้ำในโปรแกรม
การแจงนับ C#
การแจงนับใช้ในภาษาการเขียนโปรแกรมใดๆ เพื่อกำหนดชุดค่าคงที่ ตัวอย่างเช่น สามารถกำหนดวันในสัปดาห์เป็นการแจงนับและนำไปใช้ที่ใดก็ได้ในโปรแกรม ใน C# การแจงนับถูกกำหนดด้วยความช่วยเหลือของคำหลัก 'enum'
มาดูตัวอย่างว่าเราสามารถใช้คำหลัก 'enum' ได้อย่างไร
ในตัวอย่างของเรา เราจะกำหนดการแจงนับที่เรียกว่าวัน ซึ่งจะใช้ในการจัดเก็บวันในสัปดาห์ สำหรับแต่ละตัวอย่าง เราจะแก้ไขเฉพาะฟังก์ชันหลักในไฟล์ Program.cs ของเรา
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 คำอธิบาย:-
- 'อีนัม' ประเภทข้อมูล ถูกกำหนดให้ประกาศแจงนับ ชื่อของการแจงนับคือวัน วันทั้งหมดของสัปดาห์จะถูกระบุเป็นค่าของการแจงนับ
- ในที่สุดฟังก์ชัน console.write จะใช้เพื่อแสดงค่าใดค่าหนึ่งของการแจงนับ
หากป้อนโค้ดด้านบนถูกต้องแล้วและโปรแกรมทำงานสำเร็จจะแสดงผลลัพธ์ต่อไปนี้
Output:
จากเอาต์พุต คุณจะเห็นได้ว่าค่า 'Sun' ของการแจงนับจะปรากฏในคอนโซล
เหตุใดจึงต้องใช้ Enum ใน C#?
การใช้ enum ทำให้โปรแกรมอ่านง่ายขึ้น ปลอดภัยขึ้น และบำรุงรักษาง่ายขึ้น แทนที่จะกระจายตัวเลขที่ไม่สามารถอธิบายได้ ซึ่งบางครั้งเรียกว่าตัวเลขมหัศจรรย์ ไปทั่วโค้ด การใช้ enum จะตั้งชื่อที่สื่อความหมายให้กับแต่ละค่า โดยระบุถึงเจตนาของมัน
- การอ่าน: ชื่ออย่าง Days.Fri นั้นชัดเจนกว่าเลข 5 มาก ดังนั้นใครก็ตามที่อ่านโค้ดก็จะเข้าใจความหมายได้ทันที
- ความปลอดภัยประเภท: ตัวแปรที่ประกาศด้วยประเภท enum จะเก็บค่าได้เพียงค่าเดียวจากสมาชิกที่กำหนดไว้เท่านั้น ซึ่งจะช่วยป้องกันไม่ให้ค่าที่ไม่ถูกต้องหลุดรอดไปได้ping มา
- การบำรุงรักษา: ค่าคงที่ที่เกี่ยวข้องจะอยู่ในที่เดียวกัน ดังนั้นการเพิ่มหรือเปลี่ยนชื่อค่าจะอัปเดตโปรแกรมทั้งหมดอย่างสม่ำเสมอ
- การผูกข้อมูล: เฟรมเวิร์กต่างๆ เช่น WPF และ ASP.NET สามารถผูกค่า enum กับรายการแบบดรอปดาวน์ได้ ซึ่งทำให้ enum มีประโยชน์สำหรับการสร้างส่วนติดต่อผู้ใช้
เนื่องจากคอมไพเลอร์จะตรวจสอบทุกการกำหนดค่ากับสมาชิกที่อนุญาต ดังนั้น enum จึงช่วยตรวจจับข้อผิดพลาดได้ตั้งแต่เนิ่นๆ ก่อนที่โปรแกรมจะเริ่มทำงาน
การกำหนดค่าแบบกำหนดเองให้กับ Enum ใน C#
โดยค่าเริ่มต้น C# จะกำหนดค่า 0 ให้กับสมาชิกตัวแรกของ enum และเพิ่มค่าของสมาชิกถัดไปทีละหนึ่ง ใน enum Days ข้างต้น Sun เท่ากับ 0, Mon เท่ากับ 1 และ Sat เท่ากับ 6 คุณสามารถแทนที่ค่าเริ่มต้นเหล่านี้ได้โดยการกำหนดค่าตัวเลขที่ชัดเจน
- ค่าที่ระบุอย่างชัดเจน: การเขียน enum Level {Low = 1, Medium = 5, High = 10} จะกำหนดค่าให้กับสมาชิกแต่ละตัวเป็นตัวเลขที่เลือกไว้ แทนที่จะใช้ลำดับค่าเริ่มต้น
- งานที่ได้รับมอบหมายบางส่วน: หากคุณกำหนดค่าให้กับสมาชิกเพียงบางส่วนเท่านั้น คอมไพเลอร์จะนับเลขจากค่าสุดท้ายที่กำหนดให้กับสมาชิกที่เหลือ
- ประเภทพื้นฐาน: โดยค่าเริ่มต้น enum จะเก็บค่าสมาชิกเป็น int แต่คุณสามารถเปลี่ยนเป็น byte, short หรือ long เพื่อประหยัดหน่วยความจำหรือขยายช่วงค่าได้
ค่าที่กำหนดเองมีประโยชน์เมื่อตัวเลขต้องตรงกับระบบภายนอก เช่น รหัสฐานข้อมูลหรือค่าคงที่ของโปรโตคอล เพื่อให้ enum สะท้อนข้อมูลจริงได้อย่างแม่นยำ
วิธีการแปลง Enum ใน C# เป็น int, string และ Flags
ภาษา C# มักต้องการแปลงค่า enum ไปเป็นรูปแบบอื่น เช่น การจัดเก็บเป็นตัวเลข หรือการอ่านค่ากลับมาจากข้อความ การแปลงเหล่านี้เกิดขึ้นได้ด้วยวิธีมาตรฐานไม่กี่วิธี
- แปลง Enum เป็น int: การแปลงประเภทข้อมูลอย่างชัดเจน เช่น (int)Days.Wed จะส่งคืนค่าจำนวนเต็มที่อยู่เบื้องหลัง ซึ่งมีประโยชน์สำหรับการจัดเก็บหรือการคำนวณทางคณิตศาสตร์
- แปลงจำนวนเต็มเป็น enum: การแปลงในทิศทางตรงกันข้าม เช่น (Days)3 จะแปลงตัวเลขกลับไปเป็นสมาชิก enum ที่ตรงกัน
- แปลงสตริงเป็น enum: Enum.Parse และ Enum.TryParse ที่ปลอดภัยกว่า จะแปลงชื่อ เช่น “Fri” ให้เป็นสมาชิก Days.Fri โดยไม่แสดงข้อผิดพลาดข้อความไม่ถูกต้อง
- แปลงค่า Enum เป็นสตริง: การเรียกใช้เมธอด ToString() บนสมาชิกใดๆ จะส่งคืนชื่อของสมาชิกนั้น ดังนั้น Days.Sun.ToString() จะส่งคืน “Sun” สำหรับแสดงผลหรือบันทึกข้อมูล
- รายชื่อสมาชิก: Enum.GetValues และ Enum.GetNames จะส่งคืนค่าหรือชื่อทั้งหมด ซึ่งเป็นประโยชน์เมื่อต้องการเติมข้อมูลลงในเมนูหรือตรวจสอบความถูกต้องของข้อมูลที่ป้อน
เมื่อต้องการแสดง enum ที่ประกอบด้วยตัวเลือกหลายตัวเลือกแทนที่จะเป็นตัวเลือกเดียว ให้ใช้แอตทริบิวต์ Flags และกำหนดค่าให้กับสมาชิกแต่ละตัวเป็นกำลังสอง เช่น 1, 2, 4 และ 8 จากนั้นคุณสามารถรวมสมาชิกเข้าด้วยกันโดยใช้ตัวดำเนินการ OR แบบบิต และทดสอบตัวเลือกเฉพาะโดยใช้เมธอด HasFlag
เทคนิคการแปลงเหล่านี้ช่วยให้ enum สามารถเคลื่อนย้ายได้อย่างราบรื่นระหว่างชื่อที่อ่านง่าย ตัวเลขที่จัดเก็บ และชุดแฟล็กที่รวมกันping ส่วนที่เหลือของโปรแกรมนั้นปลอดภัยต่อการพิมพ์และเข้าใจง่าย



