Pergunta

Quais são os melhores casos de uso para tipos anônimos?

Parece-me que eles só são úteis dentro de um contexto limitado, por exemplo, uma classe ou uma função. Eles dificilmente pode estar fora usada deste contexto, porque sem reflexão ninguém vai saber o que estão disponíveis nestes tipos de propriedades.

Foi útil?

Solução

Tipos anônimos se destinam a ser utilizados apenas em âmbitos muito estreitas. A maioria dos casos de uso que eu tive para eles envolvem Linq.

var result = from x in MyCollection
             select new 
             {
                 x.Prop1, 
                 x.Prop2
             };

Além disso, no caso de LINQ to SQL - usando tipos anônimos irá gerar SQL diferente selecionando apenas as colunas que são usadas no tipo anônimo. No caso acima (se fosse uma consulta LINQ to SQL), geraria algo como "select prop1, prop2 de mytable" em vez de selecionar todos os campos.

Eu nunca se deparar (ainda) uma situação onde eu queria apenas declarar um novo tipo anônimo no meu código. Suponho que, se qualquer outra coisa, talvez seria um bom uso para constantes locais?

var x = new
        {
            FirstName = "Scott",
            LastName = "Ivey"
        };

Outras dicas

No entanto, ele não pára por exemplo o MVC equipe ASP.NET você usá-los como um objeto de parâmetro de tabela de hash-style ...

Url.Action(new{controller="Home", action="Index"})

O que eu não iria encorajar, no entanto, por causa do uso pesado de cordas mágicas.

Eu uso quase exclusivamente tipos anônimos em Linq declarações onde no mesmo método que você iterar sobre o conjunto de resultados. Isso é muito bonito por que eles foram introduzidos

Um caso em que eu ter encontrado o tipo anônimo para ser útil é em serialização de objetos para JSON e devolvê-los em ações ASP.NET MVC. Você não necessariamente quer retornar todas as propriedades de um objeto e um tipo anônimo pode te ajudar com isso ..

[AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Person(int id)
    {
        Person person = manager.GetPersonById(id);
        if(Request.IsAjaxRequest())
            return Json(new {Name=person.Name, Age=person.Age,...});
        else
            ...
    }

Eles são a qualquer hora útil que você deseja executar uma consulta sobre alguns objetos e, em seguida, fazer alguma outra operação sobre eles (como iterate).

Por exemplo:

var procs = System.Diagnostics.Process.GetProcesses().Select(p => new { p.Id, p.ProcessName});
foreach(var p in procs)
{
    Console.WriteLine("{0}: {1}", p.Id, p.ProcessName);
}

Eu tive muita sorte com eles ultimamente em satisfazer campos em DataGrids ou DataViews que dependem de colunas de consultas que não retornam os mesmos dados. Por exemplo, às vezes fontes de dados foram normalizados ou campos renomeado por várias razões. Usando uma consulta LINQ retornar tipos anônimos como um 'front-end' Somos capazes de manter exisitng grades em produção.

correta; eles são apenas prático dentro de um escopo extremamente limitado.

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