Tuple ใน C# เป็นโครงสร้างข้อมูลที่ช่วยให้จัดกลุ่มค่าหลายค่าที่มีชนิดข้อมูลต่างกันเข้าด้วยกันได้ โดยไม่ต้องสร้างคลาสหรือโครงสร้าง (struct) แบบกำหนดเอง
รูปแบบการประกาศ Tuple แบบคลาสิก (Tuple Class)
รูปแบบมาตรฐานในการสร้าง Tuple ที่มีสมาชิก 2 ค่า (int และ string) คือดังนี้:
Tuple<int, string> tuple = new Tuple<int, string>(20, "Tom");
การเข้าถึงค่าใน Tuple
Tuple ใช้ property Item1, Item2, Item3 ... ตามลำดับเพื่อเข้าถึงค่าแต่ละตัว:
// ตรวจสอบค่าตัวแรก (integer)
if (tuple.Item1 == 99) {
Console.WriteLine(tuple.Item1);
}
// ตรวจสอบค่าตัวที่สอง (string)
if (tuple.Item2 == "Tim") {
Console.WriteLine(tuple.Item2);
}
ตัวอย่างโค้ดสมบูรณ์
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
Tuple<int, string> tuple = new Tuple<int, string>(50, "Tom");
if (tuple.Item1 == 99) {
Console.WriteLine(tuple.Item1);
}
if (tuple.Item2 == "Tim") {
Console.WriteLine(tuple.Item2);
}
}
}
}
Tuple แบบใหม่ (ValueTuple) - C# 7.0 ขึ้นไป
ตั้งแต่ C# 7.0 สามารถใช้ ValueTuple ซึ่งเป็น struct และมีประสิทธิภาพดียิ่งขึ้น พร้อมรองรับการตั้งชื่อสมาชิกได้:
// รูปแบบใหม่ - ใช้ tuple literal syntax
var person = (Age: 25, Name: "Tom");
// เข้าถึงโดยชื่อ property
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
// หรือเข้าถึงแบบดัชนี (Item1, Item2...)
Console.WriteLine($"Name: {person.Item2}, Age: {person.Item1}");
การคืนค่า Tuple จากเมธอด
public (int Sum, int Count) Calculate(int[] numbers) {
int sum = 0;
foreach (var n in numbers) sum += n;
return (sum, numbers.Length);
}
// ใช้งาน
var result = Calculate(new[] { 1, 2, 3, 4, 5 });
Console.WriteLine($"Sum: {result.Sum}, Count: {result.Count}");
สรุปความแตกต่าง
| คุณสมบัติ | Tuple (Class) | ValueTuple (Struct) |
|---|---|---|
| ชนิดข้อมูล | Reference Type | Value Type |
| ประสิทธิภาพ | ต่ำกว่า (heap allocation) | สูงกว่า (stack allocation) |
| ตั้งชื่อสมาชิกได้ | ไม่ได้ (ใช้ Item1, Item2...) | ได้ |
| รองรับ C# | ทุกเวอร์ชัน | 7.0+ |