Pergunta

Eu tenho tentado chegar até a velocidade em algumas das características mais recentes em C # e um deles que eu não tive ocasião de uso é tipos anônimos.

Eu entendo o uso que se refere a consultas LINQ e eu olhei para este SO post que fiz uma pergunta semelhante. A maioria dos exemplos que eu vi na net estão relacionados com consultas LINQ, o que é legal. Eu vi alguns exemplos tanto artificial também, mas não realmente qualquer coisa que eu vi um monte de valor.

Você tem um novo uso para tipos anônimos onde você acha que ele realmente fornece-lhe alguma utilidade?

Foi útil?

Solução

Com um pouco de reflexão, você pode transformar um tipo anônimo em um Dictionary ; Roy Osherove blogues de sua técnica para este aqui: http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx

Jacob Carpenter utiliza tipos anônimos como uma maneira de inicializar objetos imutáveis ??com sintaxe semelhante ao objeto inicialização: http://jacobcarpenter.wordpress.com/2007/11/19/named-parameters-part-2/

Tipos anônimos pode ser usado como uma maneira de dar apelidos mais fáceis de ler para as propriedades de objetos em um ser coleção iterada com uma declaração foreach. (Embora, para ser honesto, isso não é nada mais do que o uso padrão de tipos anônimos com LINQ to Objects ) Por exemplo:.

Dictionary<int, string> employees = new Dictionary<int, string>
{
    { 1, "Bob" },
    { 2, "Alice" },
    { 3, "Fred" },
};

// standard iteration
foreach (var pair in employees)
    Console.WriteLine("ID: {0}, Name: {1}", pair.Key, pair.Value);

// alias Key/Value as ID/Name
foreach (var emp in employees.Select(p => new { ID = p.Key, Name = p.Value }))
    Console.WriteLine("ID: {0}, Name: {1}", emp.ID, emp.Name);

Enquanto não há muita melhoria nesta pequena amostra, se o loop foreach eram mais longos, referindo-se ID e Name pode melhorar a legibilidade.

Outras dicas

ASP.NET MVC utiliza o encaminhamento desses objetos em todo o lugar.

Às vezes eu suspeito que pode ser útil para realizar algo que é como uma consulta LINQ, mas não acontece de usar LINQ - mas você ainda quer uma projeção de algum tipo. Eu não acho que eu usaria tipos anônimos na sua forma actual para qualquer coisa radicalmente diferente de projeções LINQ.

Uma coisa que eu faria gostaria de ver é a capacidade de criar "chamados" tipos com simples declarações, o que geraria as propriedades e construtor da mesma forma que para tipos anônimos, bem como substituir iguais / GetHashCode / ToString da mesma maneira (útil). Esses tipos poderia então ser convertido em tipos "normais" quando a necessidade de adicionar mais comportamento surgiu.

Mais uma vez, eu não acho que eu iria usá-lo terrivelmente muitas vezes - mas de vez em quando a capacidade seria útil, especialmente dentro de alguns métodos de uma classe. Isso poderia, talvez, ser parte de um esforço maior para dar mais apoio aos tipos imutáveis ??em C # 5.

Para acrescentar ao que disse Justiça, ASP.Net MVC é o primeiro lugar que eu vi estes usados ??de maneiras interessantes e úteis. Aqui está um exemplo:


Html.ActionLink("A Link", "Resolve", new { onclick = "someJavascriptFn();" })

ASP.Net MVC utiliza tipos anônimos como este para adicionar atributos arbitrários para elementos HTML. Acho que há um número de diferentes maneiras que você poderia realizar a mesma coisa, mas eu gosto do estilo conciso de tipos anônimos, dá as coisas mais de uma sensação de linguagem dinâmica.

A maior uso para tipos anônimos é LINQ, na verdade, é por isso que ele foi criado.

Eu acho que uma das razões para um tipo de fora anônima de linq é criar um temporária struct-como objeto, por exemplo:.

var x = new { a = 1, b = 2 };

Isso pode tornar sua vida um pouco mais fácil em algumas situações.

Eu usei-os para fazer e-mails templated como eles são grandes, se você estiver usando reflexão e genéricos.

Algumas informações podem ser encontradas aqui: http: //www.aaron- powell.com/blog.aspx?id=1247

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