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

ValueTuple de C# (ValueTuple)

C#7.0 (.NET Framework 4.7) introdujo la estructura ValueTuple, que es la representación de tipo de valor de tupla.

ValueTuple está disponible solo en.NET Framework 4.7Disponible. Si no ve ValueTuple en su proyecto, debe instalar ValueTuple. (.NET Framework 4.7O o más reciente, o.NET Standard Library 2.0 o una versión más reciente ya incluye ValueTuple.)

Para instalar el paquete ValueTuple, haga clic con el botón derecho del ratón en el proyecto del administrador de soluciones y seleccioneAdministrar paquetes NuGet...。 Esto abrirá el administrador de paquetes NuGet. Haga clic enExplorarpestaña, en la caja de búsqueda busca ValueTuple y luego seleccionaSystem.ValueTuplepaquete, como se muestra a continuación.

inicialización de ValueTuple

Es fácil crear e inicializar ValueTuple. Puede usar paréntesis () y especificar los valores dentro de ellos para crear e inicializarlo.

var person = (1, "Bill", "Gates");    
//tupla equivalente
//var person = Tuple.Create(1,“ Bill”,“ Gates”);"Bill", "Gates");

También se puede inicializar ValueTuple especificando los tipos de cada elemento, como se muestra a continuación.

ValueTuple<int, string, string> person = (1, "Bill", "Gates");
person.Item1;  // devolver1
person.Item2;   // devolver "Bill"
person.Item3;   // devolver "Gates"

Este es un método abreviado para declarar tipos para cada miembro.

(int, string, string) person = (1, "Bill", "Gates");
person.Item1;  // devolver1
person.Item2;   // devolver "Bill"
person.Item3;   // devolver "Gates"

Por favor, notar que no usamos var en la declaración de inicialización de tuple superior. En su lugar, proporcionamos el tipo de cada miembro entre los corchetes.

Una tupla debe tener al menos dos valores. Los siguientes no son casos de tupla:

var number = (1);  // de tipo int, no de tupla
var numbers = (1,2); // tuplas válidas

Diferente de Tuple, ValueTuple puede contener ocho valores o más.

var numbers = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);

nombres de miembros

Podemos asignar nombres a las propiedades de ValueTuple en lugar de usar los nombres de propiedades predeterminados, como Item, por ejemplo.1,Item2etc.

(int Id, string FirstName, string LastName) person = (1, "Bill", "Gates");
person.Id;   // devolver1
person.FirstName;  // devolver "Bill"
person.LastName; // devolver "Gates"

También podemos asignar valores a los nombres de los miembros en el lado derecho, como se muestra a continuación.

var person = (Id:1, FirstName: "Bill", LastName: "Gates");

Por favor, notar que podemos proporcionar el nombre del miembro en el lado izquierdo o derecho, pero no en ambos lados. El lado izquierdo tiene prioridad sobre el derecho. El contenido siguiente ignorará el nombre del lado derecho.

// PersonId, FName, LName se ignorarán.
(int Id, string FirstName, string LastName) person = (PersonId:1, FName: "Bill", LName: "Gates");
//PersonId, FirstName, LastName se ignorarán. Tendrá nombres por defecto: Item1,Item2,Item3。
(string, string, int) person = (PersonId:1, FName: "Bill", LName: "Gates");

También podemos asignar valores a los miembros de las variables.

string firstName = "Bill", lastName = "Gates";
var per = (FirstName: firstName, LastName: lastName);

ValueTuple como tipo de retorno

Los siguientes métodos devuelven ValueTuple.

static void Main(string[] args)
{
    DisplayTuple(1, "Bill", "Gates");
}
static void DisplayTuple((int, string, string) person)
{
    Console.WriteLine($"Id = { person.Item1");
    Console.WriteLine($"Nombre = { person.Item2");
    Console.WriteLine($"Apellido = { person.Item3");
}

También podemos especificar nombres de miembros diferentes para el ValueTuple devuelto por el método.

static void Main(string[] args)
{
			var person = GetPerson();
}
static (int, string, string) GetPerson()}} 
{
			return (Id:1, FirstName: "Bill", LastName: "Gates");
}

Desestructuración

Se puede recuperar cada miembro del ValueTuple mediante la desestructuración. La sintaxis de declaración de desestructuración divide el ValueTuple en varias partes y asigna cada parte a nuevas variables.

static void Main(string[] args)
{  
    // Cambiar el nombre de las propiedades
    (int PersonId, string FName, string LName) = GetPerson();
}
static (int, string, string) GetPerson()}} 
{
			return (Id:1, FirstName: "Bill", LastName: "Gates");
}

También podemos usar var en lugar del nombre explícito del tipo de datos.

static void Main(string[] args)
{    
    // Se utiliza var como tipo de datos
    (var PersonId, var FName, var LName) person = GetPerson();
}
static (int, string, string) GetPerson()}} 
{ 
   return (Id:1, FirstName: "Bill", LastName: "Gates");
}

ValueTuple también permite la desestructuración de miembros no utilizados con 'descartar'.

// Usar el guión bajo _ para descartar el miembro no utilizado LName
(var id, var FName, _) = GetPerson();