HOWTO · Csharp

Inizializza una lista di tuple in C#

Questo articolo esplora diversi approcci per inizializzare in modo efficiente una lista di tuple in C#.

In questa pagina

Per inizializzare in C# una lista di tuple, scegli tra List<Tuple<int, string>> per le tuple di riferimento e List<(int, string)> per le tuple di valore. Puoi creare gli elementi con un inizializzatore di raccolta, aggiungerli con Add() oppure proiettare una sequenza esistente usando LINQ. Questi tipi di tuple sono distinti: scegli quello compatibile con i tipi usati nel resto del codice.

Inizializzare una lista di tuple in C# con il metodo Tuple.Create()

Tuple.Create() crea una tupla di riferimento. Un inizializzatore di raccolta consente di creare più elementi mentre dichiari una List<Tuple<int, string>>:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var tupleList = new List<Tuple<int, string>>
        {
            Tuple.Create(1, "Apple"),
            Tuple.Create(2, "Banana"),
            Tuple.Create(3, "Cherry")
        };

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

Il tipo generico della lista specifica i tipi degli elementi della tupla: prima un int, poi una string. Tuple.Create() deduce questi tipi da ogni coppia di valori e il ciclo visita gli elementi nell’ordine in cui sono stati inseriti. Consulta la documentazione del metodo Tuple.Create() per vedere i relativi overload.

Inizializzare una lista di tuple in C# con la notazione ()

Una lista può contenere anche tuple di valore, scritte con la notazione (). Questo esempio usa List<(int, string)> e inizializza direttamente tre elementi:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var tupleList = new List<(int, string)>
        {
            (1, "Apple"),
            (2, "Banana"),
            (3, "Cherry")
        };

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

Qui (int, string) è il tipo degli elementi della tupla di valore e ogni coppia tra parentesi fornisce un elemento della lista. Le stesse coppie possono essere rappresentate usando un tipo diverso per gli elementi della lista. Scopri di più sulle tuple di valore in C#.

Inizializzare una lista di tuple in C# con List<Tuple<T1, T2>> e Add()

Usa Add() quando gli elementi arrivano nel tempo o quando la lista viene costruita dalla logica dell’applicazione. Inizia con una lista vuota, quindi aggiungi ogni tupla di riferimento:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var tupleList = new List<Tuple<int, string>>();

        tupleList.Add(Tuple.Create(1, "Apple"));
        tupleList.Add(Tuple.Create(2, "Banana"));
        tupleList.Add(Tuple.Create(3, "Cherry"));

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

Il tipo dichiarato della lista determina il tipo di tupla che contiene. Ogni chiamata a Add() aggiunge una Tuple<int, string>; Tuple.Create() costruisce quella tupla di riferimento a partire dai valori forniti.

Inizializzare una lista di tuple in C# con LINQ

LINQ è utile quando gli elementi della tupla provengono da una sequenza esistente. Select() proietta ogni numero in una tupla e ToList() materializza la sequenza proiettata in una lista:

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        var tupleList = Enumerable.Range(1, 3)
            .Select(i => Tuple.Create(i, $"Fruit{i}"))
            .ToList();

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

Enumerable.Range(1, 3) fornisce i valori 1, 2 e 3. La proiezione abbina ogni numero a una stringa e ToList() restituisce una List<Tuple<int, string>>. Poiché la proiezione usa Tuple.Create(), si tratta di tuple di riferimento.

Conclusione

Per un insieme fisso di valori, un inizializzatore di raccolta è conciso sia con Tuple.Create() sia con i valori letterali delle tuple di valore. Usa Add() per costruire progressivamente una List<Tuple<T1, T2>> e LINQ quando vuoi convertire una sequenza esistente in elementi tupla. Le tuple di riferimento (Tuple<T1, T2>) e le tuple di valore ((T1, T2)) sono tipi diversi: mantieni la scelta coerente con le API e i dati usati dal codice.