ValueTuple là kiểu giá trị (value type) đại diện cho tuple, được giới thiệu từ C# 7.0. Khác với Tuple<T> (reference type, class), ValueTuple là struct, hiệu suất tốt hơn, hỗ trợ deconstruction và named elements.
Cài đặt
Trong .NET Framework cũ, cần cài package NuGet:
- Right-click project → Manage NuGet Packages
- Browse → tìm "System.ValueTuple" → Install
.NET Core / .NET 5+ đã có sẵn.
Ví dụ cơ bản
var val = (5, 50, 500, 5000); // ValueTuple
// Truy cập bằng Item1, Item2... hoặc deconstruction
var (a, b, c, d) = val;
Console.WriteLine(a); // 5
// Hoặc dùng tên (named tuple)
var person = (Name: "John", Age: 30, City: "Hanoi");
Console.WriteLine(person.Name); // John
Mã nguồn mẫu
using System;
class Program
{
static void Main()
{
var val = (5, 50, 500, 5000);
Console.WriteLine("Add System.ValueTuple package to run this program!");
if (val.Item2 == 50)
{
Console.WriteLine(val);
}
}
}
Kết quả
(5, 50, 500, 5000)
Ưu điểm ValueTuple so với Tuple (class)
| Đặc điểm | Tuple (Class) | ValueTuple (Struct) |
|---|---|---|
| Kiểu | Reference type | Value type |
| Hiệu suất | Heap allocation | Stack allocation, no GC |
| Tên thành phần | Không (Item1...) | Có (named elements) |
| Deconstruction | Không | Có |
| Mutable | Immutable | Mutable |
Chuyển đổi
// ValueTuple → Tuple
Tuple t = val.ToTuple();
// Tuple → ValueTuple (C# 7.3+)
var vt = t.ToValueTuple();