Tuple có thể được truyền như một tham số đơn lẻ vào phương thức, thay vì truyền nhiều tham số riêng lẻ. Điều này hữu ích khi nhóm các giá trị liên quan.
Ví dụ: Tuple 3 phần tử
var tuple = Tuple.Create(100, 200, 300);
Show(tuple); // Truyền cả tuple
static void Show(Tuple tuple)
{
Console.WriteLine(tuple.Item1); // 100
Console.WriteLine(tuple.Item2); // 200
Console.WriteLine(tuple.Item3); // 300
}
Mã nguồn hoàn chỉnh
using System;
public class Program
{
public static void Main()
{
var tuple = Tuple.Create(100, 200, 300);
Show(tuple);
}
static void Show(Tuple tuple)
{
Console.WriteLine(tuple.Item1);
Console.WriteLine(tuple.Item2);
Console.WriteLine(tuple.Item3);
}
}
Kết quả
100
200
300
Cách hiện đại với ValueTuple (C# 7+)
// Truyền ValueTuple
void ShowModern((int X, int Y, int Z) point)
{
Console.WriteLine($"X={point.X}, Y={point.Y}, Z={point.Z}");
}
// Gọi
ShowModern((10, 20, 30));
// Hoặc deconstruction ngay trong tham số (C# 7.3+)
void ShowDeconstructed(int x, int y, int z) { ... }
ShowDeconstructed(tuple); // Tự động deconstruct nếu tuple có 3 phần tử
Ứng dụng thực tế
- Trả về nhiều giá trị từ method (thay cho out params)
- Nhóm tham số liên quan (toạ độ, kích thước, ngày tháng)
- Dictionary key phức tạp:
Dictionary<(int, int), string> - Pattern matching với tuple (C# 8+)
Lưu ý
Tuple(class) là immutable - không thể sửa đổi sau khi tạo.ValueTuple(struct) là mutable - có thể gántuple.Item1 = 5.- Tuple tối đa 8 phần tử (Tuple<T1..T8>), phần tử thứ 8 phải là Tuple khác nếu cần nhiều hơn (nested).