English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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);
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);
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"); }
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();