Usando Tuples em C#–retornando vários parâmetros de um método

Olá pessoal,

Uma das coisas interessantes da linguagem C# é a quantidade de opções que temos para resolver o problemas do nosso dia a dia. Um caso interessante e bem comum é termos a necessidade de passar vários parâmetros para um método e às vezes também retornar vários parâmetros, e é bem provável que você se utilize de artifícios como parâmetros de saída (out) ou referência (ref).

Mas existe algo bem mais interessante, que são as tuplas (Tuples). Na prática uma tuple é um array de vários tipos de dados, que podem ser passados ou retornados por um método.

Vamos ao exemplo:

1. Crie um projeto Console no Visual Studio (no meu caso estou usando o 2010, mas você pode usar o 2008 também):

2. Vamos criar um método que retorne vários parâmetros e mostrar o use de Tuple:

class Program{
    static void Main(string[] args)
{
var retorno = RetornaVariosParametros();
Console.WriteLine(“Valor inteiro: {0}”,retorno.Item1);
Console.WriteLine(“Valor String: {0}”, retorno.Item2);
Console.WriteLine(“Valor Double: {0}”, retorno.Item3);
}
    public static Tuple<int,string,double> RetornaVariosParametros()
{
return Tuple.Create(10, “Tuple”, 100.50);
}
}

Veja como é simples: você usa uma Tuple<> identificando os tipos de dados que ela conterá e depois acessa cada valor através dos Items.

O exemplo é bem simples, mas demonstra a facilidade e a versatilidade das tuplas.

Mais referências sobre Tuple em http://msdn.microsoft.com/en-us/library/system.tuple.aspx

Um abraço e até a próxima.

Visual Studio Debugger Canvas

Olá,

Foi lançado a algum tempo um recurso muito legal para o Visual Studio 2010 Ultimate, ainda desconhecido por muitos desenvolvedores, o Debugger Canvas, que é uma maneira mais visual de fazer debug de suas aplicações.

Normalmente, ao fazer debug de uma aplicação, você executa e vai percorrendo linha a linha, entrando e saindo de rotinas dentro do código e depois de algum tempo, você acaba com diversas janelas abertas no Visual Studio.

Agora imagine que ao fazer o debug, os diferentes códigos fontes vão se abrindo e se relacionando, formando um caminho percorrido pelo fluxo de execução, mais visual, não serial muito bom ? Pois é exatamente isto que o Debugger Canvas faz.

Para começar, vamos instalar o debugger canvas, que é um plugin para o Visual Studio Ultimate e pode ser baixado aqui.

Agora abra um projeto você está acostumado a fazer debug, no meu caso, vou abrir o projeto TailspinToys, que é um projeto exemplo da Microsoft. Vamos executá-lo (F5) e ver o que acontece com o debug.

Primeiro vamos abrir o CartController.cs e colocar um break point no método AddCart()

imageimage

Agora vamos executar o programa pressionando F5. Após a aplicação abrir no browser, clique em “Model Airplanes” e depois em  em “View Plane”. Em seguida clique em “Add to Cart”.

Neste ponto o código irá parar no local onde fizemos o break point, mas com uma grande diferença no visual:

image

Veja que agora estamos no Debugger Canvas, no codigo do controller. Em cima na barra da janela está a árvore de execução, ou seja, por onde o código passou até chegar aqui e existe também um botão no canto direito da tela que mostrar as variáveis locais para o método:

image

Vamos executar o código pressionando F11 para entrar em algum outro método e logo em seguida temos esta outra janela:

image

Pressionando mais algumas vezes o F11 temos o seguinte:

image

Fazendo um pequeno ajuste visual temos o seguinte:

image

Aqui vemos a linha de execução do programa até onde paramos, ou seja, se continuarmos a execução teremos um mapa visual de todo o fluxo de execução da nossa aplicação, e o que ganhamos com isto ? Facilidade para entender como o código funciona.

Uma última coisa é que quando você instala o Debugger Canvas, ele fica como padrão para o seu debug e caso você queira ativar/desativar, basta abrir o menu Debug/Debugger Canvas/Options and Settings de desmarcar a propriedade abaixo:

image

Espero que vocês tenham gostado do potencial deste novo recurso para o Visual Studio e isto mostra mais uma vez que a ferramenta está evoluindo e tem muito mais a evoluir.

Abraços e até a próxima.