csharp-que-son-tuplas

Qué son y cómo usar las tuplas en C#

En C#, las tuplas son estructuras de datos ligeras que permiten agrupar múltiples valores de diferentes tipos en una sola unidad.

A diferencia de las clases o structs, las tuplas son más sencillas y están diseñadas para simplificar el manejo de múltiples valores (nos evitan tener que definir tipos adicionales).

En C# las tuplas son inmutables. Eso significa que una vez creadas, sus valores no pueden ser cambiados.

Sintaxis de las tuplas

Las tuplas se pueden declarar utilizando el operador () de la siguiente forma.

var tupla = (valor1, valor2);
  • valor1, valor2 son los valores que integran la tupla.

Es posible crear una tupla con cualquier número de valores. En el ejemplo anterior he puesto dos, pero podrían ser tres, cuatro, o los que queráis.

var tupla = (valor1, valor2, valor3, ...);

Aunque tampoco conviene crear una tupla larguísima, no es su propósito.

Ejemplo básico

Lo vemos más fácil con un ejemplo. Así crearíamos una tupla en C#,

var miTupla = (1, "Hola", 3.14);

En este caso hemos creado una tupla con contiene un int, un string y un double.

También podríamos declarar la tupla explícitamente, con la que especificamos los tipos de la tupla.

(int, string, double) miTupla = (1, "Hola", 3.14);

Finalmente, podemos crear la tupla a partir de la clase Tuple<...>.

Tuple<int, string, bool> tupla = new Tuple<int, string, bool>(1, "Hola", true);

Pero francamente, no entiendo porque alguien querría hacer esto, teniendo la sintaxis anterior 😆.

Uso básico

Acceso a los elementos de la tupla

Podemos acceder a los elementos de una tupla se acceden utilizando las propiedades Item1, Item2, etc.

var tupla = (1, "Hola", true);

Console.WriteLine(tupla.Item1); // 1
Console.WriteLine(tupla.Item2); // Hola
Console.WriteLine(tupla.Item3); // True

Tuplas con nombre

También es posible asignar nombres a los elementos de una tupla. Esto se conoce como tuplas nombradas. En general, son más cómodas que las tuplas “sin nombre”.

var tupla = (numero: 1, texto: "Hola", booleano: true);

Console.WriteLine(tupla.numero); // 1
Console.WriteLine(tupla.texto); // Hola
Console.WriteLine(tupla.booleano); // True

Destructuración de tuplas

También podemos utilizar la sintaxis de desestructuración en tuplas, para descomponerla en sus valores originales.

var tupla = (1, "Hola", 3.14);

var (entero, cadena, numero) = tupla;

// si prefieres especificar los tipos
(int numero, string texto, bool booleano) = tupla;

En este caso, estamos asignando los elementos de la tupla tupla a variables individuales utilizando la sintaxis de desestructuración con los nombres asignados.

Ejemplos prácticos