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

Tuple Rest Property ใน C#: Tuple 8+ Elements

คลาส Tuple (Legacy) รองรับสูงสุด 7 Generic Type Parameters โดยตรง สำหรับ 8 Elements ขึ้นไป ต้องใช้ Rest Property ที่เป็น Nested Tuple

โครงสร้าง 8-Tuple

Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>

Element ที่ 8 (TRest) ต้องเป็น Tuple<...> อีกตัวหนึ่ง

ตัวอย่าง: 8 Elements

using System;

public class Program
{
    public static void Main()
    {
        // สร้าง 8-Tuple: 7 Elements + Rest (1 Element)
        var myTuple = Tuple.Create(
            1,              // T1
            2.5M,           // T2
            "Tom",          // T3
            "100",          // T4
            5,              // T5
            10.5M,          // T6
            "Henry",        // T7
            Tuple.Create("100") // TRest (Nested Tuple)
        );
        
        Console.WriteLine("Item1: " + myTuple.Item1);   // 1
        Console.WriteLine("Item2: " + myTuple.Item2);   // 2.5
        Console.WriteLine("Item3: " + myTuple.Item3);   // Tom
        Console.WriteLine("Item4: " + myTuple.Item4);   // 100
        Console.WriteLine("Item5: " + myTuple.Item5);   // 5
        Console.WriteLine("Item6: " + myTuple.Item6);   // 10.5
        Console.WriteLine("Item7: " + myTuple.Item7);   // Henry
        Console.WriteLine("Item8: " + myTuple.Rest);    // (100)
    }
}

ผลลัพธ์

Item1: 1
Item2: 2.5
Item3: Tom
Item4: 100
Item5: 5
Item6: 10.5
Item7: Henry
Item8: (100)

เข้าถึง Element ใน Rest

// Rest เป็น Tuple (Single Element)
var eighth = myTuple.Rest.Item1; // "100"

// สำหรับ 9+ Elements: Nested Deeper
var nineTuple = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, Tuple.Create(9)));
// Item8 = Rest.Item1 (8)
// Item9 = Rest.Rest.Item1 (9)

ValueTuple (C# 7+) - ไม่มีข้อจำกัด

// ValueTuple รองรับ Elements กี่ตัวก็ได้
var bigTuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
var (a, b, c, d, e, f, g, h, i, j, k, l) = bigTuple;

สรุป: Tuple Class (Legacy) จำกัด 7 Elements ต้องใช้ Rest Property สำหรับ 8+ | ValueTuple (Modern) ไม่มีข้อจำกัด ควรใช้ ValueTuple แทน