Estive olhando os Generics e seus métodos, e teve um deles que me chamou a atenção. O método que me refiro é o List.ConvertAll<T>, que pelo que pude ver, ele retorna uma nova lista, podendo inclusive ser de um outro tipo. Este método por sua vez, recebe em seu parametro um delegate que será responsável por fazer as devidas conversões.
Como estamos utilizando C#, podemos ao invés de criar um delegate e um método auxiliar para esta conversão, criarmos um método anonimo, que além de mais elegante, escreve-se menos código. Eis aqui um exemplo simples da utilização deste método:
List<Usuario> usuarios = new List<Usuario>();
usuarios.Add(new Usuario(“Nome Usuario 1”));
usuarios.Add(new Usuario(“Nome Usuario 2”));
usuarios.Add(new Usuario(“Nome Usuario 3”));
List<string> nomes = usuarios.ConvertAll<string>(delegate(Usuario u)
{
return u.Nome;
});
foreach(string s in nomes){
Console.WriteLine(s);
}
Como vemos, através do método ConvertAll, específicamos o tipo que será retornado e através do método anonimo, que recebe um objeto do tipo Usuario e através deste, recupera o valor da propriedade Nome para que a mesma seja adicionada na lista de strings denominada “nomes”.
Eu comecei a fazer os testes em um projeto em VB.NET, mas infelizmente, o mesmo não tem suporte à métodos anonimos, obrigando-nos a criar o Delegate e também um método auxiliar para que o mesmo retorne o valor a ser recuperado e armazenado nesta nova listagem.
Boas Eduardo,
Sim, o código acima está utilizando método anônimo. Internamente o que ele faz é percorrer a List<T>, executando o código que você define para cada um dos elementos.
Tens algum teste de desmpenho deste método?