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