C# Academy · บทเรียน

นิพจน์ switch และการตรวจสอบครบทุกกรณีด้วย when (จำลองใน C# 6)

จำลองนิพจน์ switch ด้วยเมธอดแบบ switch-return ดั้งเดิม เพิ่มการตรวจสอบเงื่อนไข และใช้การโยนข้อผิดพลาดใน default เพื่อจับกรณีที่ไม่ได้จัดการขณะทำงาน

บทเรียน 2 จาก 38 ขั้นตอน

นิพจน์ switch และการตรวจสอบครบทุกกรณีด้วย when (จำลองใน C# 6) เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

แผน: การเลียนแบบ switch

เป้าหมาย: เลียนแบบนิพจน์ switch สมัยใหม่ใน C# 6

  • คืนค่าจาก classic switch
  • ตรวจสอบล่วงหน้าด้วยตัวตรวจสอบป้องกัน
  • หยุดทำงานทันทีด้วย default throw เพื่อให้ครอบคลุมทุกกรณี

switch ที่คืนค่า

คำสั่งเลือกที่ ส่งค่ากลับ จะทำงานเหมือนนิพจน์เลือก ส่วน การโยนข้อผิดพลาดกรณีเริ่มต้น จะดักจับค่าที่ไม่รู้จัก

using System;

public enum Grade { A, B, C, D, F }

public class Program
{
  static string Describe(Grade g)
  {
    switch (g)
    {
      case Grade.A: return "Excellent";
      case Grade.B: return "Good";
      case Grade.C: return "Average";
      case Grade.D: return "Below average";
      case Grade.F: return "Fail";
      default: throw new ArgumentOutOfRangeException("g");
    }
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(Describe(Grade.A));
    Console.WriteLine(Describe(Grade.F));
  }
}

จำลองเงื่อนไขแบบมีตัวกรองด้วยการตรวจสอบ

ใช้ การตรวจสอบเงื่อนไข (คำสั่งเงื่อนไข) เพื่อจำลองเงื่อนไขแบบมีตัวกรอง ตรวจสอบข้อมูลขาเข้าก่อน แล้วจึงแยกสาขาตามช่วงค่า

using System;

public class Program
{
  // Emulate: switch(score) { case var s when s >= 90: ... } using pre-guards
  static string LabelScore(int score)
  {
    if (score < 0 || score > 100) throw new ArgumentOutOfRangeException("score");

    if (score >= 90) return "A";
    if (score >= 80) return "B";
    if (score >= 70) return "C";
    if (score >= 60) return "D";
    return "F";
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(LabelScore(92)); // A
    Console.WriteLine(LabelScore(77)); // C
  }
}

ตัวช่วย Exhaustive

เพิ่มตัวช่วยขนาดเล็ก Exhaustive.Unhandled แล้วเรียกใช้ในกรณีเริ่มต้น การทดสอบจะล้มเหลวเมื่อไม่ได้จัดการค่าอีนัมใหม่

using System;

public enum Status { New, Active, Closed }

public static class Exhaustive
{
  public static Exception Unhandled(object x)
  {
    return new InvalidOperationException("Unhandled case: " + x);
  }
}

public class Program
{
  static int ToHttp(Status s)
  {
    switch (s)
    {
      case Status.New: return 201;
      case Status.Active: return 200;
      case Status.Closed: return 410;
      default: throw Exhaustive.Unhandled(s);
    }
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(ToHttp(Status.Active)); // 200
  }
}

การตรวจสอบเงื่อนไข + การเลือกตามชนิด

ตรวจสอบข้อมูลของแต่ละสาขาด้วย การตรวจสอบล่วงหน้า จากนั้นเลือกสาขาตามตัวจำแนก วิธีนี้จำลองเงื่อนไขแบบมีตัวกรองในแต่ละกรณี

using System;

public enum ShapeKind { Circle, Square }

public sealed class Shape
{
  public ShapeKind Kind;
  public double Radius; // for circle
  public double Side;   // for square
}

public class Program
{
  static double Area(Shape s)
  {
    if (s == null) throw new ArgumentNullException("s");

    // “when” guards (validate needed fields)
    if (s.Kind == ShapeKind.Circle && s.Radius < 0) throw new ArgumentException("Radius must be >= 0");
    if (s.Kind == ShapeKind.Square && s.Side < 0) throw new ArgumentException("Side must be >= 0");

    switch (s.Kind)
    {
      case ShapeKind.Circle: return Math.PI * s.Radius * s.Radius;
      case ShapeKind.Square: return s.Side * s.Side;
      default: throw new InvalidOperationException("Unhandled shape: " + s.Kind);
    }
  }

  public static void Main(string[] args)
  {
    Shape c = new Shape { Kind = ShapeKind.Circle, Radius = 2.0 };
    Console.WriteLine("Area circle = " + Area(c));
  }
}

เคล็ดลับและข้อควรระวัง

เคล็ดลับ:

  • เลือกใช้เมธอดขนาดเล็กที่ ส่งค่ากลับ และมีความรับผิดชอบเดียว
  • คง การโยนข้อผิดพลาดกรณีเริ่มต้น ไว้ เพื่อเปิดเผยกรณีที่ขาดหายตั้งแต่เนิ่น ๆ
  • วาง การตรวจสอบเงื่อนไข ไว้ก่อนคำสั่งเลือก เพราะทำหน้าที่เหมือนเงื่อนไขแบบมีตัวกรอง

การจำลองการครอบคลุมทุกกรณี

ตรวจสอบสั้น ๆ: ใน C# 6 จะจำลองการจัดการคำสั่งเลือกให้ครอบคลุมทุกกรณี คล้ายกับนิพจน์เลือกที่มีเงื่อนไขแบบมีตัวกรองได้อย่างไร

สรุปทบทวน

สรุปทบทวน: ส่งค่ากลับจากคำสั่ง เลือก แบบเดิมให้เหมือนนิพจน์เลือก เพิ่ม การตรวจสอบเงื่อนไข สำหรับเงื่อนไขแบบมีตัวกรอง และคง การโยนข้อผิดพลาดกรณีเริ่มต้น ไว้เพื่อแสดงกรณีที่ขาดหาย

เริ่มต้นได้ฟรี

เรียนรู้ C# ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
93
บทเรียน
346

คำถามที่พบบ่อย

บทเรียน “นิพจน์ switch และการตรวจสอบครบทุกกรณีด้วย when (จำลองใน C# 6)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “นิพจน์ switch และการตรวจสอบครบทุกกรณีด้วย when (จำลองใน C# 6)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “นิพจน์ switch และการตรวจสอบครบทุกกรณีด้วย when (จำลองใน C# 6)”

จำลองนิพจน์ switch ด้วยเมธอดแบบ switch-return ดั้งเดิม เพิ่มการตรวจสอบเงื่อนไข และใช้การโยนข้อผิดพลาดใน default เพื่อจับกรณีที่ไม่ได้จัดการขณะทำงาน คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน

บทเรียน “นิพจน์ switch และการตรวจสอบครบทุกกรณีด้วย when (จำลองใน C# 6)” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. รูปแบบ is รูปแบบเชิงสัมพันธ์และตรรกะ (จำลองใน C# 6)
  2. นิพจน์ switch และการตรวจสอบครบทุกกรณีด้วย when (จำลองใน C# 6)
  3. การสร้างแบบจำลองโดเมนด้วยยูเนียนแยกแยะได้ (เรคคอร์ด) — จำลองใน C# 6
← กลับไปที่ C# Academy