Pergunta

Já vi muitas descrições de como funcionam os tipos anônimos, mas não tenho certeza de como eles são realmente úteis.Quais são alguns cenários que tipos anônimos podem ser usados ​​para resolver em um programa bem projetado?

Foi útil?

Solução

Os tipos anônimos não têm nada a ver com o design de sistemas ou mesmo com o nível de classe.Eles são uma ferramenta para os desenvolvedores usarem durante a codificação.

Eu nem trato os tipos anônimos como tipos em si.Eu os uso principalmente como tuplas anônimas em nível de método.Se eu consultar o banco de dados e depois manipular os resultados, prefiro criar um tipo anônimo e usá-lo, em vez de declarar um tipo totalmente novo que nunca será usado ou conhecido fora do escopo do meu método.

Por exemplo:

var query = from item in database.Items
            // ...
            select new { Id = item.Id, Name = item.Name };

return query.ToDictionary(item => item.Id, item => item.Name);

Ninguém se importa com `a, o tipo anônimo.Está lá para que você não precise declarar outra classe.

Outras dicas

Do LINQ em ação (página 76, seção 2.6.3):

...tipos anônimos [são] uma ótima ferramenta para resultados temporários rápidos e simples.Não precisamos declarar classes para manter resultados temporários graças aos tipos temporários.

basicamente eles são úteis para reter informações temporariamente no escopo local.Qualquer coisa a mais requer o uso de reflexão e pode se tornar um grande problema.O exemplo que eles dão no livro citado acima é escrito para consolar o id, o nome e a quantidade de memória ocupada por cada processo em execução.Eles criam um tipo anônimo, adicionam-no a uma lista (todas em uma instrução) e então usam ObjectDumper para produzi-lo.Portanto, o código não precisa mais de uma classe declarada separadamente para conter o ID, o nome e a memória usados, mas tudo é declarado implicitamente, reduzindo a contagem de linhas para 4:

var pl = new List<Object>();
foreach(var p in Process.GetProcesses())
  pl.Add(new {p.Id, p.ProcessName, Memory=p.WorkingSet64});
ObjectDumper.Write(pl);

O uso mais popular de tipos anônimos é para especificar projeções em uma consulta LINQ to SQL.

Esta consulta

from x in db.Table1 select new {x.Column1, Alias2=x.Column2}

será convertido para este SQL:

SELECT Column1, Column2 AS Alias2 FROM Table1

Com tipos anônimos, você pode criar projeções ad hoc sem definir previamente o tipo.O compilador definirá o tipo para você.

Quando você cria tipos para fins de 'Usar e lançar'.Isso parece ter acontecido devido ao LINQ.Parece ser uma maneira de criar estruturas com campos dinamicamente para uma consulta LINQ.Retornando uma estrutura/tipo apenas com campos especificados.Se não fosse por isso, você teria que declarar um tipo .Net para cada combinação exclusiva de campos que deseja recuperar.

Use-os com Linq.

É importante saber que o LINQ não obriga você a usar tipos anônimos.Você também pode escrever construções normais de objetos após a seleção.

var query = from item in database.Items
// ...
select new Person(item.id, item.Name)

Isso evita uma programação de reflexão feia.

@Wouter:

var query = from item in database.Items
select new Person
{
ID =item.id,
NAME= item.Name
};

onde ID e NAME são propriedade da sua classe Person.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top