Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Truyền Tuple làm tham số phương thức trong C#

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án tuple.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).