C# - Retornando múltiplos valores de um método - Tuplas


Neste artigo veremos como retornar mais de um item de um método usando C#.

Continuando o artigo anterior veremos agora como retornar mais de um valor de um método usando Tuplas.

A partir da versão 4.0 do .NET Framework a linguagem C# oferece novo conjunto de classes que podem ser usadas para realizar o tratamento de um conjunto de elementos tipados distintos.

Eles são chamados tuples e possuem as seguintes assinaturas:

public class Tuple <T1>
public class Tuple <T1, T2>
public class Tuple <T1, T2, T3>
public class Tuple <T1, T2, T3, T4>
public class Tuple <T1, T2, T3, T4, T5>
public class Tuple <T1, T2, T3, T4, T5, T6>
public class Tuple <T1, T2, T3, T4, T5, T6, T7>
public class Tuple <T1, T2, T3, T4, T5, T6, T7, TRest>

Cada uma delas possui propriedades somente-leitura chamadas item1, item2, etc., uma para cada tipo de parâmetro.

Assim, basicamente a classe Tuple() fornece métodos estáticos para criar objetos de coleção de itens e é uma estrutura de dados que tem um número específico e sequencial de elementos.

As classes Tuple genéricas existentes no  .NET Framework possuem, no entanto, têm duas limitações importantes. Por exemplo, as classes Tuple nomeiam suas propriedades como Item1, Item2 e assim por diante. Esses nomes não carregam informações semânticas. O uso desses tipos Tuple não assim permite comunicar o significado de cada uma das propriedades.

Para resolver este problema o C# 7.0  introduziu o suporte de linguagem para tuplas, que permite nomes semânticos para os campos de uma tupla, usando tipos de tupla novos e mais eficientes.

Veremos a seguir como retornar mais de um valor de um método usando Tuplas usando a versão anterior da linguagem C# e a nova versão disponível a partir do C# 7.0.

recursos usados:

  • Visual Studio 2017 Community

Criando o projeto Console

Vamos continuar usando o projeto Console  RetornaMultiplosValores criando no artigo anterior.

A partir do menu opção File-> Add New Project; inclua um novo projeto chamado Usando_Tuplas;

1- Usando Tuplas (.NET Framework 4.0)

Neste exemplo vamos retornar mais de um valor de um método usando a versão das tuplas introduzida na versão 4.0 do .NET Framework.

Inclua o código abaixo no arquivo Program.cs :

using System;
namespace Usando_Tuplas
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 30;
            int b = 30;
            var resultado = Calcula(a, b);
            Console.WriteLine($" 30 + 30 = {resultado.Item1}  e   30 x 30 = {resultado.Item2} ");
            Console.ReadLine();
        }
        private static Tuple<int, int> Calcula(int a, int b)
        {
            var resultado = new Tuple<int, int>(a + b, a * b);
            return resultado;
        }
    }
}

Observe que nesta sintaxe os valores de dados fornecidos para os objetos de tupla são expostos como Item1, Item2, etc .

Executando o projeto teremos o resultado a seguir:

2- Usando Tuplas (C# 7.0)

Vamos agora usar o novo recurso para tuplas na versão 7.0 da linguagem C# que introduziu o suporte de linguagem para tuplas, que permite nomes semânticos para os campos de uma tupla, usando tipos de tupla novos e mais eficientes.

Nota: Se você estiver usando o .Net Framework 4.6.2 ou anterior, será necessário incluir o pacote nuget System.ValueTuple no seu projeto,, caso contrário, você obterá um erro.

Inclua o código abaixo no arquivo Program.cs:

using System;
namespace Usando_Tuplas_7
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 30;
            int b = 30;
            (int soma, int multiplicacao) = Calcula(a, b);
            Console.WriteLine($" 30 + 30 = {soma}  e   30 x 30 = {multiplicacao} ");
            Console.ReadLine();
        }
        private static (int, int) Calcula(int a, int b)
        {
            return (a + b, a * b);
        }
    }
}

Resultado final será o mesmo mas perceba que agora nao precisamos mais usar .Item1 ou .Item2 para acessar os valores retornados, podemos fazer isso diretamente.

Para mais detalhes sobre esse novo recurso veja o meu artigo:  C# - Novidades da versão 7 - II - Macoratti

Pegue o projeto completo aqui :  RetornaMultiploValores.zip  

"Não sejais vagarosos no cuidado; sede fervorosos no espírito, servindo ao Senhor;
Alegrai-vos na esperança, sede pacientes na tribulação, perseverai na oração;"
Romanos 12:11,12

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

Referências:


José Carlos Macoratti