English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tuple de C# (元组)

C# Programación Orientada a Objetos (OOP)4La clase Tuple<T> se introdujo en el .NET Framework

.0 introducida. Una tupla es una estructura de datos que contiene una secuencia de elementos de diferentes tipos de datos. Puede usarse en situaciones donde se necesita una estructura de datos para guardar objetos con propiedades, pero no se desea crear un tipo separado para ellos.

Sintaxis:1Tuple<T2Tuple<T3Tuple<T4Tuple<T5Tuple<T6Tuple<T7, T

, TRest>

Tuple<int, string, string> persona = new Tuple<int, string, string>(1, "Steve", "Jobs");

En el ejemplo anterior, creamos una tupla que contiene una instancia del registro de una persona. Asignamos un tipo a cada elemento y pasamos los valores al constructor. Es molesto especificar el tipo de cada elemento. C# introdujo una clase asistente estática Tupla, que devuelve una instancia de Tuple <T> sin tener que especificar el tipo de cada elemento, como se muestra a continuación.

var persona = Tupla.Crear(1, "Steve", "Jobs");

Una tupla puede contener un máximo de ocho elementos. Cuando intenta incluir ocho o más elementos, se producirá un error de compilación.

var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, 8);

acceso a elementos de tupla

Los elementos de la tupla se pueden acceder mediante la propiedad Item < numeroelemento >, por ejemplo Item1、 Item2、 Item3etc., se puede acceder a Item7propiedad. Item1propiedad devuelve el primer elemento, Item2devuelve el segundo elemento, y así sucesivamente. El último elemento (el8un elemento) se utilizará la propiedad Rest para devolver.

var persona = Tupla.Crear(1, "Steve", "Jobs");
persona.Item1; // Retorno 1
persona.Item2; // devuelve "Steve"
persona.Item3; // devuelve "Jobs"
var números = Tupla.Crear("Uno", 2, 3, "Four", 5, "Seis" 7, 8);
numbers.Item1; // Retorna "Uno"
numbers.Item2; // Retorno 2
numbers.Item3; // Retorno 3
numbers.Item4; // Retorna "Cuatro"
numbers.Item5; // Retorno 5
numbers.Item6; // Retorna "Seis"
numbers.Item7; // Retorno 7
numbers.Rest; // Retorno (8)
numbers.Rest.Item1; // Retorno 8

Generalmente, el8ubicaciones para tuplos anidados, puede usar la propiedad Rest para acceder a esa ubicación.

Tuplos anidados

Si se desea incluir ocho o más elementos en un tuplo, se puede lograr mediante la inclusión de otro objeto de tuplo anidado como el octavo elemento. Se puede acceder al último tuplo anidado utilizando la propiedad Rest. Para acceder a los elementos del tuplo anidado, utilice Rest.Item1.Item<elelementNumber> propiedades.

var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9, 10, 11, 12, 13));
numbers.Item1; // Retorno 1
numbers.Item7; // Retorno 7
numbers.Rest.Item1; //Retorno (8,9,10,11,12,13)
numbers.Rest.Item1.Item1; //Retorno 8
numbers.Rest.Item1.Item2; //Retorno 9

Puede incluir objetos de tuplos anidados en cualquier posición de la secuencia. Sin embargo, se recomienda colocar los tuplos anidados al final de la secuencia para poder acceder a ellos utilizando la propiedad Rest.

var numbers = Tuple.Create(1, 2, Tuple.Create(3, 4, 5, 6, 7,  8), 9, 10, 11, 12, 13 );
numbers.Item1; // Retorno 1
numbers.Item2; // Retorno 2
numbers.Item3; // Retorno (3, 4, 5, 6, 7,  8)
numbers.Item3.Item1; // Retorno 3
numbers.Item4; // Retorno 9
numbers.Rest.Item1; //Retorno13

Tuplos como parámetros de método

Los métodos pueden pasar tuplos como parámetros.

static void Main(string[] args)
{
	var person = Tuple.Create(
}1, "Steve", "Jobs");
    DisplayTuple(person);
}
static void DisplayTuple(Tuple<int,string,string> person)
{
    Console.WriteLine($"Id = { person.Item"1});
    Console.WriteLine($"Nombre = { person.Item"2});
    Console.WriteLine($"Apellido = { person.Item"3});
}

Tuplos como tipo de retorno

Los tuplos pueden devolverse desde un método.

static void Main(string[] args)
{
	var person = GetPerson();
}
static Tuple<int, string, string> GetPerson() 
{
	return Tuple.Create(
}1, "Bill", "Gates");
}

Uso de tuplos

Los tuplos se pueden usar en las siguientes situaciones:

  1. Cuando desee devolver varios valores de un método sin usar los parámetros ref o out...

  2. Cuando desee pasar varios valores a un método mediante un solo parámetro...

  3. Cuando desee guardar temporalmente registros de la base de datos o ciertos valores sin crear una clase separada...

Desventajas de los tuplos:}}

  1. Tuple es un tipo de referencia, no un tipo de valor. Se asigna en la pila y puede causar operaciones intensivas en CPU.

  2. Tuple se limita a incluir ocho elementos. Si se necesita almacenar más elementos, se debe usar un grupo anidado. Sin embargo, esto puede causar ambigüedades.

  3. Se puede acceder a los elementos de Tuple utilizando el patrón de nombre Item <elementNumber> de la propiedad, lo que no es muy razonable.

C#7Se introdujo ValueTuple para superar las limitaciones de Tuple y facilitar su uso. Aprende sobre él en el siguiente capítulo.