0Pricing
C# Academy · บทเรียน

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]

ตรวจสอบความเข้าใจ: แอตทริบิวต์ใดทำให้ชนิดแจกแจงสามารถแทนตัวเลือกแบบบิตที่นำมารวมกันได้ เช่น Read | Write

ทบทวน

ทบทวน: ใช้ชนิดแจกแจงเพื่อสร้างค่าคงที่ที่ชัดเจนและปลอดภัยตามชนิดข้อมูล แปลงข้อความและตรวจสอบค่าอย่างปลอดภัย สำหรับตัวเลือกที่นำมารวมกันได้ ให้เพิ่ม [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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Structs: ความหมายแบบค่าและรูปแบบเปลี่ยนแปลงไม่ได้
  2. ชนิดคล้ายเรคคอร์ดและความเท่าเทียมตามค่า (รูปแบบ)
  3. Enum และ [Flags]
← กลับไปที่ C# Academy