ใน C# คลาส Tuple เข้าถึงสมาชิกได้ผ่าน property Item1, Item2, ..., Item7 และ Rest (สำหรับ Tuple 8 elements ขึ้นไป) โดย Item1 คือ element แรกเสมอ
ตัวอย่างโค้ดที่ 1: Tuple 7 Elements
using System;
public class Demo
{
public static void Main(string[] args)
{
var tuple1 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500);
var tuple2 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500);
Console.WriteLine("Is Tuple1 equal to Tuple2? = " + tuple1.Equals(tuple2));
Console.WriteLine("HashCode of Tuple1 = " + tuple1.GetHashCode());
Console.WriteLine("HashCode of Tuple2 = " + tuple2.GetHashCode());
Console.WriteLine("Tuple1 Item 5th = " + tuple1.Item5);
Console.WriteLine("Tuple2 Item 5th = " + tuple2.Item5);
Console.WriteLine("Tuple1 Item 1st = " + tuple1.Item1);
Console.WriteLine("Tuple2 Item 1st = " + tuple2.Item1);
}
}
ผลลัพธ์
Is Tuple1 equal to Tuple2? = True
HashCode of Tuple1 = 3231587
HashCode of Tuple2 = 3231587
Tuple1 Item 5th = 100
Tuple2 Item 5th = 100
Tuple1 Item 1st = 75
Tuple2 Item 1st = 75
ตัวอย่างโค้ดที่ 2: Tuple 8 Elements (มี Rest)
using System;
public class Demo
{
public static void Main(string[] args)
{
var tuple = Tuple.Create(1200, 1500, 2200, 2700, 3100, 3500, 4500, 5500);
Console.WriteLine("HashCode of Tuple = " + tuple.GetHashCode());
Console.WriteLine("Tuple Item 1st = " + tuple.Item1);
Console.WriteLine("Tuple Item 2nd = " + tuple.Item2);
Console.WriteLine("Tuple Item 3rd = " + tuple.Item3);
Console.WriteLine("Tuple Item 4th = " + tuple.Item4);
Console.WriteLine("Tuple Item 5th = " + tuple.Item5);
Console.WriteLine("Tuple Item 6th = " + tuple.Item6);
Console.WriteLine("Tuple Item 7th = " + tuple.Item7);
// Item8 อยู่ใน tuple.Rest.Item1
}
}
ผลลัพธ์
HashCode of Tuple = 49989024
Tuple Item 1st = 1200
Tuple Item 2nd = 1500
Tuple Item 3rd = 2200
Tuple Item 4th = 2700
Tuple Item 5th = 3100
Tuple Item 6th = 3500
Tuple Item 7th = 4500
โครงสร้าง Tuple ใน .NET
| Arity | Class | Properties |
| 1 | Tuple<T1> | Item1 |
| 2 | Tuple<T1, T2> | Item1, Item2 |
| 3 | Tuple<T1, T2, T3> | Item1, Item2, Item3 |
| 4 | Tuple<T1, T2, T3, T4> | Item1, Item2, Item3, Item4 |
| 5 | Tuple<T1, T2, T3, T4, T5> | Item1, Item2, Item3, Item4, Item5 |
| 6 | Tuple<T1, T2, T3, T4, T5, T6> | Item1, Item2, Item3, Item4, Item5, Item6 |
| 7 | Tuple<T1, T2, T3, T4, T5, T6, T7> | Item1, Item2, Item3, Item4, Item5, Item6, Item7 |
| 8 | Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> | Item1..Item7, Rest (Tuple) |
Tuple แบบใหม่: ValueTuple (C# 7+) - แนะนำให้ใช้
// Syntax สะดวก
var tuple = (10, 20, 30);
Console.WriteLine(tuple.Item1); // 10
// Named elements
var person = (Name: "John", Age: 30, City: "NYC");
Console.WriteLine(person.Name); // John
Console.WriteLine(person.Age); // 30
// Deconstruction
var (name, age, city) = person;
ความแตกต่างสำคัญ
| คุณสมบัติ | Tuple (Class) | ValueTuple (Struct) |
| Item1..Item7 | มี | มี |
| Named elements | ไม่มี | มี |
| Deconstruction | ไม่มี | มี |
| Mutability | Immutable | Mutable |
| Performance | Heap allocation | Stack allocation |