Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีการประกาศ Tuple ใน C#

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+