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

การแยกโครงสร้าง

แยกทูเพิลออกเป็นตัวแปรแต่ละตัว

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

การแยกโครงสร้างคืออะไร

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

using System;

class Program
{
    static void Main()
    {
        var point = (3, 4);
        (int x, int y) = point;
        Console.WriteLine("x=" + x + ", y=" + y);
    }
}

การแยกโครงสร้างทูเพิล

ใส่ตัวแปรเป้าหมายไว้ในวงเล็บทางด้านซ้ายของ = แต่ละตัวแปรจะได้รับองค์ประกอบของทูเพิลที่ตรงกัน

using System;

class Program
{
    static void Main()
    {
        var user = ("Ada", 36);
        (string name, int age) = user;
        Console.WriteLine(name + " is " + age);
    }
}

การใช้ var ในการแยกโครงสร้าง

คุณสามารถให้คอมไพเลอร์อนุมานชนิดข้อมูลด้วย var โดยใช้แยกกับแต่ละตัวแปรหรือใช้กับทั้งกลุ่มก็ได้

using System;

class Program
{
    static void Main()
    {
        var data = (1, "one", true);
        var (id, word, flag) = data;
        Console.WriteLine(id + " " + word + " " + flag);
    }
}

การแยกโครงสร้างผลลัพธ์จากวิธีการ

คุณสามารถแยกโครงสร้างทูเพิลที่วิธีการส่งคืนมาให้เป็นตัวแปรที่มีชื่อได้โดยตรง

using System;

class Program
{
    static (int, int) MinMax(int a, int b) => a < b ? (a, b) : (b, a);

    static void Main()
    {
        var (lo, hi) = MinMax(8, 3);
        Console.WriteLine("min=" + lo + ", max=" + hi);
    }
}

การละทิ้งค่า

ใช้ขีดล่าง _ เพื่อไม่สนใจส่วนที่ไม่ต้องการระหว่างการแยกโครงสร้าง

using System;

class Program
{
    static (int, int, int) Rgb() => (255, 128, 0);

    static void Main()
    {
        var (r, _, _) = Rgb();
        Console.WriteLine("Red channel: " + r);
    }
}

การแยกโครงสร้างลงในตัวแปรที่มีอยู่แล้ว

คุณสามารถกำหนดค่าให้ตัวแปรที่ประกาศไว้แล้วได้ โดยไม่ต้องระบุชื่อชนิดข้อมูล

using System;

class Program
{
    static void Main()
    {
        int a = 0, b = 0;
        (a, b) = (10, 20);
        Console.WriteLine(a + ", " + b);
    }
}

การสลับค่าด้วยทูเพิล

เทคนิคที่สะดวกคือการสลับค่าของตัวแปรสองตัวในบรรทัดเดียวด้วยการแยกโครงสร้างทูเพิล โดยไม่ต้องใช้ตัวแปรชั่วคราว

using System;

class Program
{
    static void Main()
    {
        int x = 1, y = 2;
        (x, y) = (y, x);
        Console.WriteLine("x=" + x + ", y=" + y);
    }
}

วิธีการ Deconstruct

คลาสที่สร้างเองสามารถรองรับการแยกโครงสร้างได้ด้วยการกำหนดวิธีการ Deconstruct ที่มีพารามิเตอร์ out

using System;

class Point
{
    public int X, Y;
    public Point(int x, int y) { X = x; Y = y; }

    public void Deconstruct(out int x, out int y)
    {
        x = X;
        y = Y;
    }
}

class Program
{
    static void Main()
    {
        var p = new Point(5, 9);
        var (px, py) = p;
        Console.WriteLine(px + ", " + py);
    }
}

โอเวอร์โหลด Deconstruct หลายแบบ

คลาสหนึ่งสามารถมีโอเวอร์โหลดของ Deconstruct หลายแบบ เพื่อเปิดเผยค่าจำนวนแตกต่างกันได้

using System;

class Person
{
    public string Name; public int Age; public string City;
    public Person(string n, int a, string c) { Name = n; Age = a; City = c; }

    public void Deconstruct(out string name, out int age)
    {
        name = Name; age = Age;
    }
}

class Program
{
    static void Main()
    {
        var p = new Person("Ada", 36, "London");
        var (name, age) = p;
        Console.WriteLine(name + ", " + age);
    }
}

การแยกโครงสร้างในลูปวนซ้ำ

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

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pairs = new List<(string, int)>
        {
            ("Ann", 30),
            ("Bob", 25)
        };
        foreach (var (name, age) in pairs)
            Console.WriteLine(name + " is " + age);
    }
}

สรุปการใช้งานร่วมกัน

การแยกโครงสร้างทำให้โค้ดที่ส่งคืนหรือเก็บหลายค่าอ่านได้อย่างเป็นระเบียบ โดยตั้งชื่อให้แต่ละส่วน ณ จุดที่นำไปใช้

using System;

class Program
{
    static (int Quotient, int Remainder) Divide(int a, int b) => (a / b, a % b);

    static void Main()
    {
        var (q, r) = Divide(17, 5);
        Console.WriteLine("17 / 5 = " + q + " remainder " + r);
    }
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับการแยกโครงสร้าง

ทบทวน

การแยกโครงสร้าง แยกทูเพิลหรืออ็อบเจ็กต์ออกเป็นตัวแปรที่มีชื่อภายในคำสั่งเดียว ใช้ var (a, b) = ... ละทิ้งส่วนที่ไม่ต้องการด้วย _ สลับค่าตัวแปร และแยกโครงสร้างภายใน foreach คลาสที่สร้างเองจะรองรับความสามารถนี้ได้ด้วยวิธีการ Deconstruct ที่ใช้พารามิเตอร์ out และอาจมีโอเวอร์โหลดหลายแบบ

using System;

class Program
{
    static void Main()
    {
        var (a, b, c) = (1, 2, 3);
        Console.WriteLine(a + b + c);
    }
}

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

บทเรียน “การแยกโครงสร้าง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การแยกโครงสร้าง”

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

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

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

บทเรียน “การแยกโครงสร้าง” ใช้เวลานานแค่ไหน

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

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

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

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

  1. พื้นฐาน Value Tuple
  2. องค์ประกอบทูเพิลที่มีชื่อ
  3. การแยกโครงสร้าง
  4. ทูเพิลเป็นค่าที่เมธอดส่งคืน
← กลับไปที่ C# Academy