Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 24117|Resposta: 1

[Fonte] Explicação detalhada de C# Tuple VS ValueTuple

[Copiar link]
Publicado em 14/05/2018 16:37:48 | | | |
C# 7.0 já está disponível há um tempo, e todo mundo sabe que há uma otimização para tuplas na nova funcionalidade: ValueTuple. Aqui estão exemplos detalhados para explicar Tuple VS ValueTuple em 10 minutos, para entender melhor os benefícios e o uso do ValueTuple.

Se você souber o suficiente sobre Tuple, pode pular a seção "Avaliar Tuple" e ir direto para a seção "ValueTuple Explained" para ver o uso impressionante das tuplas value.



Olhe para trás, Tuple

Tuple é um recurso novo que foi lançado com C# 4.0 e está disponível no .Net Framework 4.0 e versões superiores.

Uma tupla é uma estrutura de dados com um número e sequência específicos de elementos. Por exemplo, projete uma estrutura de dados tripla para armazenar informações dos alunos, que contenha um total de três elementos: o primeiro é o nome, o segundo é a idade e o terceiro é a altura.

Os usos específicos das tuplas são os seguintes:

1. Como criar uma tupla

Padrão. Framework de RedeTuplas suportam apenas 1 a 7 elementos de tuplasSe houver 8 elementos ou mais, você precisa usar as propriedades de aninhamento e Repouso da Tuple para implementá-lo. Além disso, a classe Tuple fornece um método estático para criar objetos tuplo.

Crie tuplas usando construtores:

Construa tuplas usando o método estático das tuplas, suportando até oito elementos:
Nota: O tipo de Tupla construído aqui é na verdade Tuple<int, int, int, int, Tuple<int>>, então o tipo de dado obtido por testTuple8.Rest é Tuple<int>, então para obter o valor exato, você precisa pegar a propriedade Item1.

2. Representa um conjunto de dados
Crie uma tupla abaixo para representar três informações sobre um aluno: nome, idade e altura, sem criar uma turma adicional separadamente.

3. Devolver múltiplos valores de um método
Quando uma função precisa devolver múltiplos valores, o parâmetro out geralmente pode ser usado, e tuplas podem ser usadas em vez de out para devolver múltiplos valores.
4. Transferência multi-valor para métodos de parâmetro único

Quando o parâmetro da função é apenas um tipo de Objeto, múltiplos valores de parâmetro podem ser passados usando a implementação da tupla.

Apesar dos métodos práticos mencionados acima, as tuplas também apresentam deficiências significativas:

  • Ao acessar elementos, você só pode acessá-los pelo ItemX, e precisa esclarecer a ordem dos elementos antes de usar, e os nomes dos atributos não têm significado prático, o que é inconveniente de lembrar.
  • Existem até oito elementos, e se quiser mais, só pode expandir aninhando com o último elemento;
  • Tupla é um tipo de referência, não um tipo de valor como outros tipos simples, que alocam espaço no heap e podem exigir muito trabalho de criação e alocação quando é intensivo na CPU.


Portanto, um novo tipo ValueTuple foi introduzido em C# 7.0, detalhado nas seções a seguir.

ValueTuple explica em detalhes

ValueTuple é um dos novos recursos do C# 7.0, disponível para .Net Framework 4.7 e superiores.

O ValueTuple não exige 4,7, desde que o Nuget seja bom, o 4,7 está embutido.
Além disso, ValueTuple é um tipo de estrutura, a Microsoft recomenda não usar estruturas acima de 64 bytes, o que também é eficaz para ValueTuple.


Uma tupla de valor também é uma estrutura de dados usada para representar um número e sequência específicos de elementos, mas é diferente de uma classe de tuplas, com as seguintes principais diferenças:

Uma tupla de valor é uma estrutura, um tipo de valor, não uma classe, enquanto uma tupla é uma classe, um tipo de referência;
Elementos de tuplas de valor são variáveis, não somente leitura, ou seja, podem alterar o valor do elemento na tupla-valor;
Uma tupla de valor dos membros dos dados é um campo, não um atributo.
O uso específico das tuplas de valor é o seguinte:

1. Como criar uma tupla de valor
Assim como as classes de tuplas, as tuplas de valor do .Net Framework suportam apenas de 1 a 7 elementos de tupla, e se houver 8 ou mais elementos, você precisa usar as propriedades aninhadas e Rest da tupla de valor para implementá-las. Além disso, a classe ValueTuple pode fornecer métodos estáticos para criar objetos de tupla de valor.

Crie tuplas usando construtores:

Construa tuplas usando o método estático das tuplas, suportando até oito elementos:
Note que o tipo de Tupla construído aqui é na verdade Tuple<int, int, <int>>, então o tipo de dado obtido por testTuple8.Rest é Tuple<int>, então para obter o valor preciso, você precisa pegar a propriedade Item1.

Diferença de Otimização:Quando uma tupla de valores com mais de 7 elementos é construída, os valores na tupla aninhada podem ser acessados usando o seguinte ItemX e, no exemplo acima, para acessar o décimo elemento, seja por testTuple10.Rest.Item3 ou testTuple10.Item10.
2. Representa um conjunto de dados
Crie uma tupla de valores para representar três informações sobre um aluno: nome, idade e altura, sem criar uma turma adicional separadamente.
3. Devolver múltiplos valores de um método
Tuplas de valor também podem retornar múltiplos valores no lugar do parâmetro out na definição da função.
Diferença de Otimização:O valor de retorno pode ser especificado no ValueTuple inexplicavelmente, usando uma nova sintaxe (,,), como (string, int, uint):
Depurar o tipo de studentInfo é o triplo ValueType.

Diferença de Otimização:O valor de retorno pode especificar o nome do elemento para facilitar a compreensão da atribuição e acesso à memória:

Atribuição conveniente de memória:



4. Transferência multi-valor para métodos de parâmetro único
Quando um parâmetro de função é de apenas um tipo de Objeto, múltiplos valores podem ser passados usando a implementação da tupla de valores.
5. Desconstruir o ValueTuple
Você pode usar var (x, y) ou (var x, var y) para resolver elementos de tupla e construir variáveis locais, enquanto usa o símbolo "_" para ignorar elementos indesejados.
Como mencionado acima, o ValueTuple torna o C# mais simples e fácil de usar. As principais vantagens em relação ao Tuple são as seguintes:

  • ValueTuple suporta uma nova sintaxe para valores de retorno de funções" (,,)", tornando o código mais simples;
  • Deve-se notar aqui que, embora seja nomeado, na verdade o valor tupla não define o atributo ou campo de tal nome, o nome real ainda é ItemX, e todos os nomes dos elementos são usados apenas durante o design e compilação, não em tempo de execução (portanto, preste atenção às operações de serialização e desserialização desse tipo);
  • Alguns ou todos os tuplas de elementos podem ser usados de forma mais conveniente usando métodos de destruição;
  • Tuplas de valor são tipos de valor, que são mais eficientes de usar do que tuplas de tipos de referência, e tuplas de valor possuem um método de comparação que pode ser usado para comparar se elas são iguais, veja Detalhes:https://msdn.microsoft.com/en-us/library/system.valuetuple






Anterior:Ferramentas de popularização científica para arquiteturas em grande escala
Próximo:HUAWEI CLOUD lança White Paper sobre Blockchain para Acelerar a Implementação da Indústria de Tecnologia Blockchain
Publicado em 15/05/2018 11:41:00 |
Concordo!
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com