Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

Tuples ใน C# 4.0

Tuple ใน C# 4.0

Tuple<T1, T2, ...> เป็นชนิดข้อมูลที่เก็บค่าหลายค่าที่ชนิดต่างกันได้ในอ็อบเจกต์เดียว ไม่ต้องสร้าง Class/Struct ใหม่ พร้อม Property Item1, Item2, ...

การประกาศ Tuple


// C# 4.0 Style (Class Tuple)
Tuple person = new Tuple(32, "Steve");

// C# 7.0+ ValueTuple (Struct, Better Performance, Named Elements)
(int Age, string Name) person2 = (32, "Steve");
var person3 = (Age: 32, Name: "Steve"); // Type Inference

ตัวอย่าง C# 4.0 Tuple Class


using System;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Tuple tuple = new Tuple(50, "Tom");
            
            if (tuple.Item1 == 50)
                Console.WriteLine(tuple.Item1); // 50
            
            if (tuple.Item2 == "Jack")
                Console.WriteLine(tuple.Item2); // ไม่พิมพ์ (ไม่เท่ากัน)
        }
    }
}

ผลลัพธ์


50

C# 7.0+ ValueTuple (แนะนำให้ใช้)


// Named Elements
var person = (Age: 25, Name: "Alice", Score: 95.5);
Console.WriteLine($"{person.Name} is {person.Age} years old"); // Alice is 25 years old

// Deconstruction
(int age, string name) = person;
Console.WriteLine(age); // 25

// Return Multiple Values
(string, int) GetPerson() => ("Bob", 30);
var (name, age) = GetPerson();

ความแตกต่าง Tuple (Class) vs ValueTuple (Struct)

คุณสมบัติTuple<T> (Class)ValueTuple (Struct)
MemoryReference Type (Heap)Value Type (Stack)
Performanceช้ากว่า (Allocation)เร็วกว่า (No Allocation)
Named Elementsไม่มี (Item1, Item2...)มี (Name: Type)
MutabilityImmutableMutable
Default Valuenull(default, default...)

ใช้เมื่อไหร่

  • Return หลายค่าจาก Method (แทน out parameters)
  • Groupping ข้อมูลชั่วคราว (Ad-hoc Data)
  • Dictionary Key แบบ Composite Key