Enum และ [Flags]
กำหนด enum ด้วยค่าและชนิดพื้นฐานที่ระบุชัด แปลงและแยกวิเคราะห์อย่างปลอดภัย และจำลองตัวเลือกที่ประกอบรวมกันได้ด้วย [Flags]
Enum และ [Flags] เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน
ภาพรวมอีนัม
เป้าหมาย: ใช้อีนัมสำหรับค่าคงที่ที่มีชื่อ และใช้ [Flags]สำหรับตัวเลือกที่นำมารวมกันได้
- ชื่อจะจับคู่กับตัวเลข
- ชนิดข้อมูลพื้นฐาน โดยค่าเริ่มต้นคือ int
- แปลงชนิดข้อมูล แยกวิเคราะห์ และตรวจสอบความถูกต้อง
- รวมค่าด้วยการดำเนินการระดับบิตเมื่อใช้ [Flags]
ชนิดแจกแจงพื้นฐาน
ชนิดแจกแจงคือค่าคงที่ที่มีชื่อ คุณสามารถพิมพ์ชื่อหรือแปลงเป็นตัวเลขพื้นฐานได้
using System;
public enum OrderStatus
{
Pending = 0,
Processing = 1,
Shipped = 2,
Delivered = 3,
Cancelled = 4
}
public class Program
{
public static void Main(string[] args)
{
OrderStatus s = OrderStatus.Processing;
Console.WriteLine("Status = " + s);
Console.WriteLine("Numeric = " + (int)s);
}
}
ชนิดพื้นฐานและการแปลงชนิด
คุณสามารถเลือกชนิดข้อมูลพื้นฐานได้ (short, byte เป็นต้น) การแปลงจากตัวเลขจะไม่ตรวจสอบว่าค่านั้นถูกต้องหรือไม่
using System;
// Choose underlying type if needed (default is int)
public enum HttpCode : short
{
Ok = 200,
NotFound = 404
}
public class Program
{
public static void Main(string[] args)
{
short code = (short)HttpCode.Ok; // cast to number
HttpCode fromNum = (HttpCode)404; // cast from number (no validation)
Console.WriteLine("code=" + code);
Console.WriteLine("fromNum=" + fromNum);
}
}
การแปลงข้อความและการตรวจสอบ
ใช้ Enum.TryParse เพื่ออ่านค่าจากข้อความ และใช้ Enum.IsDefined เพื่อตรวจสอบค่าตัวเลข
using System;
public enum Color
{
Red = 1, Green = 2, Blue = 3
}
public class Program
{
public static void Main(string[] args)
{
Color c;
bool ok = Enum.TryParse<Color>("green", true, out c); // ignore case
Console.WriteLine("Parsed? " + ok + " value=" + c);
// Validate a numeric value before casting
int raw = 4;
bool valid = Enum.IsDefined(typeof(Color), raw);
Console.WriteLine("Is 4 a defined Color? " + valid);
}
}
[Flags] ในการใช้งานจริง
เพิ่ม [Flags] และกำหนดค่าเป็นเลขยกกำลังของสอง ใช้ | เพื่อรวมค่า ใช้ & เพื่อตรวจสอบ และใช้ ~ ร่วมกับ & เพื่อลบค่า
using System;
[Flags]
public enum FileAccessMode
{
None = 0,
Read = 1, // 0001
Write = 2, // 0010
Exec = 4 // 0100
}
public class Program
{
public static void Main(string[] args)
{
FileAccessMode m = FileAccessMode.Read | FileAccessMode.Write; // combine
Console.WriteLine("Mode = " + m); // prints "Read, Write"
// Test a flag (two common patterns)
bool canWrite = (m & FileAccessMode.Write) != 0;
Console.WriteLine("Can write? " + canWrite);
// Remove a flag
m = m & ~FileAccessMode.Write;
Console.WriteLine("After remove: " + m);
}
}
เคล็ดลับเกี่ยวกับชนิดแจกแจง
เคล็ดลับ:
- กำหนดค่าอย่างชัดเจน และรักษาค่าเหล่านั้นให้คงเดิม
- สำหรับ [Flags] ให้ใช้เลขยกกำลังของสอง และเพิ่มค่า None = 0
- ตรวจสอบข้อมูลนำเข้าด้วย Enum.TryParse/IsDefined
- หลีกเลี่ยงการใช้จำนวนเต็มโดยตรงในส่วนติดต่อสาธารณะ และเลือกใช้ชนิดแจกแจงแทน
ความหมายของแอตทริบิวต์ [Flags]
ทบทวน
ทบทวน: ใช้ชนิดแจกแจงเพื่อสร้างค่าคงที่ที่ชัดเจนและปลอดภัยตามชนิดข้อมูล แปลงข้อความและตรวจสอบค่าอย่างปลอดภัย สำหรับตัวเลือกที่นำมารวมกันได้ ให้เพิ่ม [Flags] และใช้ตัวดำเนินการแบบบิตเพื่อกำหนด ตรวจสอบ หรือลบแฟล็ก
คำถามที่พบบ่อย
บทเรียน “Enum และ [Flags]” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Enum และ [Flags]” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Enum และ [Flags]”
กำหนด enum ด้วยค่าและชนิดพื้นฐานที่ระบุชัด แปลงและแยกวิเคราะห์อย่างปลอดภัย และจำลองตัวเลือกที่ประกอบรวมกันได้ด้วย [Flags] คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน
บทเรียน “Enum และ [Flags]” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Structs: ความหมายแบบค่าและรูปแบบเปลี่ยนแปลงไม่ได้
- ชนิดคล้ายเรคคอร์ดและความเท่าเทียมตามค่า (รูปแบบ)
- Enum และ [Flags]