C# - Apresentando Deconstruction - II


Hoje vamos continuar a abordar o recurso Deconstruction incluído na versão 7.0 da linguagem C# focando agora na sua utilização com tuplas.

Continuando a primeira parte do artigo onde apresentamos o recurso Deconstruction, veremos como ele pode ser útil quando uma variável armazena vários valores, como uma tupla.

Em Tuplas, o desconstrutor é usado para dividir uma tupla em partes e atribuí-las individualmente em novas variáveis. Portanto, você pode acessar um campo individual ou valor da propriedade.

A desconstrução é uma ótima maneira de consumir tuplas usando uma sintaxe que permite dividir uma tupla em variáveis.

   class Exemplo1
    {
        (string nome, int idade) GetPessoa() => ("Macoratti", 54);
        public void Executa()
        {
            var pessoaTupla = GetPessoa();
            WriteLine($"{pessoaTupla.nome} tem {pessoaTupla.idade} anos");
            // Podemos obter os valores diretamente usando - deconstruction
            (string nome, int idade) = GetPessoa();
            WriteLine($"{nome} tem {idade} anos");
        }
    }

Também podemos usar a palavra reservada var para a desconstrução da tupla:

    class Exemplo2
    {
        (string nome, int idade) GetPessoa() => ("Macoratti", 54);
        public void Executa()
        {
            (var nome1, var idade1) = GetPessoa();
            WriteLine($"{nome1} tem {idade1} anos"));
        }
    }

E podemos também atribuir as variáveis definidas previamente:

   class Exemplo3
    {
        (string nome, int idade) GetPessoa() => ("Macoratti", 54);
        public void Executa()
        {
              string nome;
            int idade;
            (nome, idade) = GetPessoa();
            WriteLine($"{nome} tem {idade} anos");
        }
    }

Com base nesses exemplos vemos que podemos desconstruir uma tupla de três formas diferentes:

1. Simplesmente declarando explicitamente o tipo de cada campo entre parênteses. Mas você não tem permissão para especificar um tipo específico fora dos parênteses, mesmo todos os campos da tupla são do mesmo tipo. Se você tentar fazer isso, receberá um erro.

2. Usando a palavra-chave var para que o C# deduza o tipo de cada variável. Podemos usar var de duas maneiras diferentes:

  1. Por a palavra-chave var fora dos parênteses;
  2. Colocar a palavra-chave var individualmente entre parênteses com algumas ou todas as variáveis;

3. Podemos desconstruir uma tupla em uma variável que já está declarada.

Usando Discard

Podemos também usar o recurso Discard ou variável de descarte na desconstrução da tupla.

Nota: O recurso Discard são variáveis somente de gravação cujos valores devem ser descartados.

Os descartes são atribuídos usando um caractere sublinhado ("_") em uma atribuição. Você tem permissão para descartar quantos valores desejar e todos são representados pelo descarte único, _.

   class Demo
    {
        public (string, int, int, string) PessoaDetalhes(string nome, int peso, int idade, string cor)
        {
            string p_nome = nome;
            int p_peso = peso;
            int p_idade = idade;
            string p_cor = cor;
            return (p_nome, p_peso, p_idade, p_cor);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Demo d = new Demo();
            (string nome, _, int idade, _) = d.PessoaDetalhes("Macoratti",80, 54,"Branca");
            WriteLine("Pessoa Detalhes");
            WriteLine($"nome = {nome}");
            WriteLine($"idade = {idade}");
            ReadLine();
        }
    }

Aqui estamos descartando o peso e a cor da pessoa.

Para saber mais veja o meu artigo sobre DiscardApresentando Discard

"Tendo sido, pois, justificados pela fé, temos paz com Deus, por nosso Senhor Jesus Cristo;"
Romanos 5:1

 Referências:


José Carlos Macoratti