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

ValueTuple (Tupla de Valor) do C#

C#7.0(.NET Framework 4.7)introduziu a estrutura ValueTuple, que é uma representação de tipo de valor de tupla.

ValueTuple está disponível apenas no .NET Framework 4.7disponível. Se você não ver ValueTuple em seu projeto,则需要安装ValueTuple。(.NET Framework 4.7ou versão ou superior, ou.NET Standard Library 2.0 ou versão superior já inclui ValueTuple.)

Para instalar o pacote ValueTuple, clique com o botão direito do mouse no projeto no gerenciador de recursos da solução e selecioneGerenciar pacotes NuGet...。 Isso abrirá o gerenciador de pacotes NuGet. Clique emNavegarAbra a guia, digite ValueTuple na caixa de pesquisa e selecioneSystem.ValueTuplePacote, conforme mostrado a seguir.

Inicialização ValueTuple

Criar e inicializar ValueTuple é fácil. Você pode usar parênteses () e especificar os valores dentro deles para criar e inicializar.

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

Também é possível inicializar ValueTuple especificando os tipos de cada elemento, conforme mostrado a seguir.

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

Aqui está um método abreviado para declarar tipos para cada membro.

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

Por favor, note que não usamos var na declaração de inicialização de tuple acima, em vez disso, fornecemos o tipo de cada membro entre colchetes.

Um tupla precisa pelo menos de dois valores. O seguinte não é um caso de tupla:

var number = (1);  // do tipo int, não tupla
var numbers = (1,2); // Tuplas válidas

Diferente do Tuple, o ValueTuple pode conter oito ou mais valores.

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

Membros nomeados

Podemos atribuir nomes a propriedades ValueTuple, em vez de usar nomes de propriedades padrão, por exemplo, Item1,Item2etc.

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

Também podemos atribuir valores a nomes de membros no lado direito, conforme mostrado a seguir.

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

Por favor, note que podemos fornecer o nome do membro no lado esquerdo ou direito, mas não podemos fornecer o nome do membro em ambos os lados. O lado esquerdo tem prioridade sobre o lado direito. O conteúdo a seguir ignorará o nome do lado direito.

// PersonId, FName, LName serão ignorados.}
(int Id, string FirstName, string LastName) person = (PersonId:1, FName: "Bill", LName: "Gates");
//PersonId, FirstName, LastName serão ignorados. Ele terá nomes padrão: Item1,Item2,Item3。
(string, string, int) person = (PersonId:1, FName: "Bill", LName: "Gates");

Também podemos atribuir valores a membros de variáveis.

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

ValueTuple como tipo de retorno

Os seguintes métodos retornam ValueTuple.

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

Também podemos especificar nomes de membros diferentes para o ValueTuple retornado pelo método.

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

Destruição

Podemos obter os membros do ValueTuple através da destruturação. A sintaxe de declaração de destruturação divide o ValueTuple em várias partes e atribui essas partes a novas variáveis.

static void Main(string[] args)
{  
    // Mudar o nome do atributo
    (int PersonId, string FName, string LName) = GetPerson();
}
static (int, string, string) GetPerson()}} 
{
		return (Id:1, FirstName: "Bill", LastName: "Gates");
}

Também podemos usar var em vez do nome explícito do tipo de dados.

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

ValueTuple também permite a

// Para o membro não utilizado LName, use _ para descartar
(var id, var FName, _) = GetPerson();