Neste artigo veremos como retornar mais de um item de um método usando C#. |
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:
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Novidades da versão 7.0 - Macoratti
C# - O tipo Dynamic - Macoratti.net
C# - Apresentando Tuples - Macoratti.net
C# - Novos recursos da versão 7.1 - Macoratti
SQL - Álgebra Relacional - Conceitos básicos - Macoratti.net