HOWTO · Csharp

Inicializar uma lista de tuplas em C#

Este artigo explora várias abordagens para inicializar de forma eficiente uma lista de tuplas em C#.

Nesta página

Para inicializar uma lista de tuplas em C#, escolha entre List<Tuple<int, string>>, para tuplas de referência, e List<(int, string)>, para tuplas de valor. Você pode criar as entradas em um inicializador de coleção, adicioná-las com Add() ou projetar uma sequência existente com LINQ. Esses tipos de tupla são distintos; escolha aquele que corresponde aos tipos usados no restante do seu código.

Inicializar uma lista de tuplas em C# usando o método Tuple.Create()

Tuple.Create() cria uma tupla de referência. Um inicializador de coleção permite criar várias entradas ao declarar uma 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);
        }
    }
}

O tipo genérico da lista registra os tipos dos elementos da tupla: primeiro um int e depois uma string. Tuple.Create() infere esses tipos a partir de cada par de valores, e o laço percorre as entradas na ordem em que foram inseridas. Consulte a documentação do método Tuple.Create() para ver as sobrecargas disponíveis.

Inicializar uma lista de tuplas em C# usando a notação ()

Uma lista também pode conter tuplas de valor, escritas com a notação (). Este exemplo usa List<(int, string)> e inicializa diretamente três entradas:

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);
        }
    }
}

Aqui, (int, string) é o tipo dos elementos da tupla de valor, e cada par entre parênteses fornece um item da lista. Os mesmos pares podem ser representados com outro tipo de elemento para a lista. Saiba mais sobre tuplas de valor em C#.

Inicializar uma lista de tuplas em C# usando List<Tuple<T1, T2>> e Add()

Use Add() quando as entradas chegam ao longo do tempo ou quando a lista é montada pela lógica da aplicação. Comece com uma lista vazia e, em seguida, adicione cada tupla de referência:

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);
        }
    }
}

O tipo declarado da lista determina que tipo de tupla ela armazena. Cada chamada a Add() adiciona uma Tuple<int, string>; Tuple.Create() constrói essa tupla de referência com os valores fornecidos.

Inicializar uma lista de tuplas em C# usando LINQ

LINQ é útil quando as entradas da tupla vêm de uma sequência existente. Select() projeta cada número em uma tupla, e ToList() materializa a sequência projetada como uma 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) fornece os valores 1, 2 e 3. A projeção combina cada número com uma string, e ToList() retorna uma List<Tuple<int, string>>. Como a projeção usa Tuple.Create(), essas são tuplas de referência.

Conclusão

Para um conjunto fixo de valores, um inicializador de coleção é conciso, tanto com Tuple.Create() quanto com literais de tupla de valor. Use Add() para montar uma List<Tuple<T1, T2>> gradualmente e LINQ para converter uma sequência existente em entradas de tupla. Tuplas de referência (Tuple<T1, T2>) e tuplas de valor ((T1, T2)) são tipos diferentes; mantenha o tipo escolhido compatível com as APIs e os dados usados pelo seu código.