Phương thức mở rộng ToTuple() (trong namespace System, cần System.ValueTuple) chuyển đổi ValueTuple sang Tuple class (legacy). Ngược lại, ToValueTuple() chuyển Tuple → ValueTuple.
Ví dụ chuyển đổi
// ValueTuple (C# 7+)
var val = (1, 2, 3);
// Chuyển sang Tuple class
Tuple myTuple = val.ToTuple();
Mã nguồn hoàn chỉnh
using System;
class Program
{
static void Main()
{
var val = (1, 2, 3);
Console.WriteLine("ValueTuple: " + val);
// Chuyển sang Tuple class
Tuple myTuple = val.ToTuple();
Console.WriteLine("Tuple: " + myTuple);
}
}
Kết quả
ValueTuple: (1, 2, 3)
Tuple: (1, 2, 3)
Yêu cầu
- Cài package
System.ValueTuple(NuGet) cho .NET Framework cũ. - .NET Core / .NET 5+ đã có sẵn.
- Cần
using System;(extension method trong namespace System).
Chuyển ngược: Tuple → ValueTuple
// C# 7.3+ / .NET Core 2.0+
Tuple legacy = Tuple.Create(1, 2, 3);
var modern = legacy.ToValueTuple(); // ValueTuple
// Deconstruction tự động
var (a, b, c) = modern;
So sánh nhanh
| Đặc điểm | ValueTuple | Tuple (Class) |
|---|---|---|
| Kiểu | struct | class |
| Tên element | Có (named) | Không (Item1...) |
| Deconstruction | Có | Không |
| Mutable | Có | Không |
| Hiệu suất | Tốt hơn | Heap allocation |
Khi nào cần chuyển?
- Tương tác API legacy yêu cầu
Tuple<T>. - Serialization một số thư viện cũ.
- Code mới: chỉ dùng ValueTuple.