Windows 8 atinge RTM

Windows 8Hoje a Microsoft anunciou que atingiu o milestone RTM do Windows 8 e Windows Server 2012. Isso significa que a versão final está pronta e foi disponibilizada para fabricantes de PC.

Para o público geral o Windows só estará disponível para compra a partir do dia 26 de outubro, mas quem tem assinatura MSDN ou TechNet já poderá fazer download da versão final no próximo dia 15 de agosto (em exatamente 2 semanas), junto com as versões finais das ferramentas de desenvolvimento.

[continuar lendo]

Usando LINQ com listas não genéricas

Hoje, mais uma vez eu me deparei com um “problema” relativamente comum: Usar LINQ em uma lista, coleção ou enumerável não generic (ocorre bastante quando se lida com código legado ou de aplicações mais antigas). Isso não é possível nativamente pois o LINQ trabalha apenas com generics por causa de inferencia de tipos.

Para não ter que colocar loopings no código apenas para migrar de não generico para genérico há 2 Extension methods bem simples que podemos usar:

  1. Cast<type>() – converte a coleção inteira para um IEnumerable do tipo informado. Praticamente não há impacto de performance pois internamente ele simplesmente faz um cast explicito para o tipo solicitado e devolve o objeto. O único problema deste método é que se houver algum objeto na coleção sendo convertida que não seja do tipo solicitado, ocorrerá uma exceção quando seu código chegar neste ítem.
  2. OfType<type>() – converte a coleção para um IEnumerable do tipo informado, mas contendo apenas com os ítens que são do tipo solicitado. Este é mais seguro para quando você estiver usando uma coleção que pode conter objetos de tipos diferentes mas apenas um tipo lhe interessa. Há um pequeno impacto de performance pois antes de retornar cada ítem este é testado para ver se é do tipo correto e se não for, os seguintes são testados até encontrar um que seja ou acabarem os ítens.

Ou seja, para listas de objetos em código legado não generic mas onde o tipo é conhecido e garantido, a primeria opção é melhor. Para outros casos, use a segunda. Abaixo tem um pequeno exemplo de uso desse código:

var col = new Collection();
col.Add("text");
col.Add("text2");
col.Add(1);
col.Add("text4");

var keysCast = col.Cast<string>();
var keysOfType = col.OfType<string>();

var resultadoT = (from k in keysOfType
                  select k).ToArray();

var resultadoC = (from k in keysCast
                  select k).ToArray();

Neste exemplo, o LINQ que popula resultadoT funcionará corretamente e resultadoT conterá 3 ítens, mas o LINQ de resultadoC vai gerar uma exceção ao tentar fazer cast explicito do inteiro 1 para string. Se a linha que acrescenta 1 na collection col for comentada, as duas queries LINQ funcionarão.

Tags: Dicas LINQ

\\BUILD\ Windows 2012

\\BUILD\ Windows 2012

Hoje a Microsoft finalmente anunciou a data da segunda versão do \\BUILD\, sua nova conferencia de desenvolvimento e design (substituta do PDC e MIX). A edição deste ano será no campus da Microsoft em Redmond, Washington de 30 de Outubro até 2 de Novembro.

As inscrições abrem no dia 8 de Agosto a partir das 12:00 (meio-dia) no horário de Brasília, no site http://www.buildwindows.com/. Nesse dia começarão a ser divulgadas neste mesmo site mais informações sobre as sessões e assuntos que serão apresentados no evento.

Se você (assim como eu) pretende ir, eu sugiro que faça sua inscrição no dia 8 de agosto, assim que for possível pois devido às novidades e lançamentos da Microsoft este ano e ao fato de ser em Redmond eu acredito que as vagas vão esgotar bem rápido.

Tags: Eventos Build