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

Chuyển đổi ValueTuple sang Tuple trong C#

Từ C# 7.0, có thể chuyển đổi giữa ValueTuple (struct, hiệu suất cao) và Tuple (class, legacy) bằng phương thức ToTuple() và ToValueTuple() (extension methods trong System.TupleExtensions).

Cài đặt (chỉ .NET Framework cũ)

Cần package System.ValueTuple từ NuGet.

Ví dụ chuyển đổi

// ValueTuple (cú pháp hiện đại)
var val = (5, 50, 500, 5000);

// Chuyển sang Tuple (class)
Tuple myTuple = val.ToTuple();

Console.WriteLine("ValueTuple: " + val);
Console.WriteLine("Tuple: " + myTuple);

Mã nguồn hoàn chỉnh

using System;

class Program
{
    static void Main()
    {
        var val = (5, 50, 500, 5000);
        Console.WriteLine("ValueTuple: " + val);
        
        // Chuyển sang Tuple class
        Tuple myTuple = val.ToTuple();
        Console.WriteLine("Tuple: " + myTuple);
    }
}

Kết quả

ValueTuple: (5, 50, 500, 5000)
Tuple: (5, 50, 500, 5000)

Chuyển ngược: Tuple → ValueTuple

// C# 7.3+ / .NET Core 2.0+
Tuple legacy = Tuple.Create(1, 2, 3);
var modern = legacy.ToValueTuple();  // (1, 2, 3)

// Deconstruction
var (a, b, c) = modern;

So sánh hai kiểu

Đặc điểmTuple (Class)ValueTuple (Struct)
NamespaceSystemSystem (ValueTuple structs)
KiểuReference typeValue type
Tên elementKhông (Item1...)Có (named)
DeconstructionKhôngCó
MutableImmutableMutable
Hiệu suấtHeap allocationStack, no GC

Khi nào dùng chuyển đổi?

  • Tương tác với API cũ yêu cầu Tuple<T>.
  • Serialization một số thư viện cũ chỉ hỗ trợ Tuple class.
  • Code mới: ưu tiên ValueTuple hoàn toàn.