ValueTuple es una estructura introducida en C# 7.0 que representa el tipo de valor Tuple . Ya está incluido en .NET Framework 4.7 o una versión superior. Le permite almacenar un conjunto de datos que contiene múltiples valores que pueden o no estar relacionados entre sí. Puede almacenar elementos a partir de 0 a 8 y puede almacenar elementos de diferentes tipos. También puede almacenar elementos duplicados en tupla de valor.
¿Por qué necesitamos ValueTuple?
Ya tenemos Tuples en C# que se usa para almacenar múltiples valores, pero Tuples tiene algunas limitaciones, estas limitaciones se solucionan en ValueTuple. O podemos decir que ValueTuple es una versión mejorada de Tuples en C# . Supera las siguientes limitaciones de las tuplas:
- Tuple es de tipo de referencia, pero ValueTuple es de tipo de valor.
- Tuple no proporciona convenciones de nomenclatura, pero ValueTuple proporciona convenciones de nomenclatura sólidas.
- En Tuples no se le permite crear una tupla con cero componentes, pero en ValueTuple se le permite crear una tupla con cero elementos.
- El rendimiento de ValueTuple es mejor que el de Tuple. Porque ValueTuple proporciona un mecanismo ligero para devolver múltiples valores de los métodos existentes. Y la sintaxis de ValueTuple está más optimizada que Tuples.
- ValueTuple proporciona más flexibilidad para acceder a los elementos de las tuplas de valor utilizando la deconstrucción y la palabra clave _ . Pero Tuple no puede proporcionar el concepto de deconstrucción y la palabra clave _.
- En ValueTuple, los miembros como item1 y item2 son campos. Pero en Tuple, son propiedades.
- En ValueTuple los campos son mutables. Pero en Tuple, los campos son de solo lectura.
Creando una ValueTuple
A diferencia de Tuple, ValueTuples proporciona un mecanismo sencillo para crear e inicializar ValueTuples. Puede crear ValueTuples usando las siguientes 3 formas:
- Uso del constructor: puede crear ValueTuple mediante el uso del constructor proporcionado por ValueTuple<T> Struct. Donde puede almacenar elementos a partir de uno a ocho con su tipo.
Sintaxis:
// Constructor for creating one element ValueTuple<T1>(T1) // Constructor for creating two elements ValueTuple<T1, T2>(T1, T2) . . . // Constructor for creating eight elements ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>(T1, T2, T3, T4, T5, T6, T7, TRest)
Ejemplo:
// C# program to illustrate how to
// create value tuple using the
// ValueTuple constructor.
using
System;
class
GFG {
// Main method
static
public
void
Main()
{
// ValueTuple with one element
ValueTuple<
int
> ValTpl1 =
new
ValueTuple<
int
>(345678);
// ValueTuple with three elements
ValueTuple<
string
,
string
,
int
> ValTpl2 =
new
ValueTuple<
string
,
string
,
int
>(
"C#"
,
"Java"
, 586);
// ValueTuple with eight elements
ValueTuple<
int
,
int
,
int
,
int
,
int
,
int
,
int
, ValueTuple<
int
> > ValTpl3 =
new
ValueTuple<
int
,
int
,
int
,
int
,
int
,
int
,
int
, ValueTuple<
int
> >(45, 67, 65, 34, 34,
34, 23,
new
ValueTuple<
int
>(90));
}
}
- Uso del método de creación: cuando usamos el constructor de la estructura ValueTuple<T> para crear una tupla de valor, debemos proporcionar el tipo de cada elemento almacenado en la tupla de valor, lo que hace que su código sea engorroso. Por lo tanto, C# proporciona otra estructura ValueTuple que contiene los métodos estáticos para crear un objeto de tupla de valor sin proporcionar el tipo de cada elemento.
Sintaxis:
// Method for creating an empty value tuple Create(); // Method for creating 1-ValueTuple Create<T1>(T1) . . . // Method for creating 8-ValueTuple Create<T1, T2, T3, T4, T5, T6, T7, TRest>(T1, T2, T3, T4, T5, T6, T7, T8)
Ejemplo:
// C# program to create value tuple
// using Create Method
using
System;
public
class
GFG {
// Main method
static
public
void
Main()
{
// Creating 0-ValueTuple
// Using Create() Method
var
Valtpl1 = ValueTuple.Create();
// Creating 3-ValueTuple
// Using Create(T1, T2, T3) Method
var
Valtpl2 = ValueTuple.Create(12, 30, 40, 50);
// Creating 8-ValueTuple
// Using Create(T1, T2, T3, T4, T5, T6, T7, T8) Method
var
Valtpl3 = ValueTuple.Create(34,
"GeeksforGeks"
,
'g'
,
'f'
,
'g'
, 56.78, 4323,
"geeks"
);
}
}
- Usando paréntesis(): Es la forma más simple de crear ValueTuples usando paréntesis() y los elementos se colocan entre ellos. Y los elementos se almacenan de 2 maneras diferentes:
- Miembro con nombre: ValueTuple le permite crear una tupla en la que cada componente puede tener su propio nombre. Para que pueda acceder a ese componente con la ayuda de su nombre. Hace que su programa sea más legible y fácil de recordar. Puede asignar los nombres a los miembros del lado izquierdo o derecho, pero no de ambos lados. Si asignó nombres a ambos lados, entonces el lado izquierdo tiene prioridad sobre el lado derecho, como se muestra a continuación:
Ejemplo 1:
// C# program to illustrated named member
using
System;
public
class
GFG {
static
public
void
Main()
{
(
int
age,
string
Aname,
string
Lang) author = (23,
"Sonia"
,
"C#"
);
}
}
Ejemplo 2:
// C# program to illustrated named member
using
System;
public
class
GFG {
static
public
void
Main()
{
var
author = (age : 23, Aname
:
"Sonia"
, Lang
:
"C#"
);
}
}
- Miembro sin nombre: en ValueTuples, los miembros sin nombre son aquellos miembros que no tienen nombres. Simplemente se crean sin ningún nombre. Como se muestra abajo:
Ejemplo 1:
// C# program to illustrated UnNamed member
using
System;
public
class
GFG {
static
public
void
Main()
{
var
author = (20,
"Siya"
,
"Ruby"
);
}
}
Ejemplo 2:
// C# program to illustrated UnNamed member
using
System;
public
class
GFG {
static
public
void
Main()
{
ValueTuple<
int
,
string
,
string
> author = (20,
"Siya"
,
"Ruby"
);
}
}
- Miembro con nombre: ValueTuple le permite crear una tupla en la que cada componente puede tener su propio nombre. Para que pueda acceder a ese componente con la ayuda de su nombre. Hace que su programa sea más legible y fácil de recordar. Puede asignar los nombres a los miembros del lado izquierdo o derecho, pero no de ambos lados. Si asignó nombres a ambos lados, entonces el lado izquierdo tiene prioridad sobre el lado derecho, como se muestra a continuación:
Acceso a miembros de ValueTuple
Aquí aprendemos cómo acceder a miembros con nombre y sin nombre de ValueTuples.
- Acceder a miembros sin nombre: en ValueTuple, se puede acceder a los miembros sin nombre utilizando los nombres de propiedades de elementos predeterminados como Elemento1, Elemento2, Elemento3, etc. Como se muestra en el siguiente ejemplo:
Ejemplo:
// C# program to illustrate how to
// access unnamed members of ValueTuple
using
System;
public
class
GFG {
// Main Method
static
public
void
Main()
{
// ValueTuple with three elements
var
author = (20,
"Siya"
,
"Ruby"
);
// Accessing the ValueTuple
// Using default Item property
Console.WriteLine(
"Age:"
+ author.Item1);
Console.WriteLine(
"Name:"
+ author.Item2);
Console.WriteLine(
"Language:"
+ author.Item3);
}
}
- Acceso a miembros con nombre: en ValueTuples, los miembros con nombre se utilizan de acuerdo con su nombre. No es necesario acceder a estos miembros con nombre con la propiedad de elemento predeterminada. Como se muestra en el siguiente ejemplo, ValueTuple contiene tres elementos, es decir, Book_id, Author_name y Book_name. Y accedemos directamente a estos elementos según sus nombres.
Ejemplo:
// C# program to illustrate how to access
// named members of ValueTuple
using
System;
public
class
GFG {
// Main Method
static
public
void
Main()
{
// ValueTuple with three elements
var
library = (Book_id : 2340, Author_name
:
"Arundhati Roy"
, Book_name
:
"The God of Small Things"
);
// Accessing the ValueTuple
// according to their names
Console.WriteLine(
"Book Id: {0}"
, library.Book_id);
Console.WriteLine(
"Author Name: {0}"
, library.Author_name);
Console.WriteLine(
"Book Name: {0}"
, library.Book_name);
}
}
Producción:
Book Id: 2340 Author Name: Arundhati Roy Book Name: The God of Small Things
Tupla de valor de retorno
En C#, puede devolver un ValueTuple desde un método. Como se muestra en el siguiente ejemplo, el método TouristDetails devuelve un ValueTuple con 3 elementos:
Ejemplo:
// C# program to illustrate how a // method return ValueTuple using System; public class GFG { // This method returns the tourist details static(int, string, string) TouristDetails() { return (384645, "Sophite", "USA"); } // Main method static public void Main() { // Store the data provided by the TouristDetails method var(Tourist_Id, Tourist_Name, Country) = TouristDetails(); // Display data Console.WriteLine("Tourist Details: "); Console.WriteLine($ "Tourist Id: {Tourist_Id}"); Console.WriteLine($ "Tourist Name: {Tourist_Name}"); Console.WriteLine($ "Country: {Country}"); } }
Producción:
Tourist Details: Tourist Id: 384645 Tourist Name: Sophite Country: USA
Publicación traducida automáticamente
Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA