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.