Pregunta

He visto muchas descripciones de cómo funcionan los tipos anónimos, pero no estoy seguro de cómo son realmente útiles.¿Cuáles son algunos escenarios para los que se pueden utilizar tipos anónimos en un programa bien diseñado?

¿Fue útil?

Solución

Los tipos anónimos no tienen nada que ver con el diseño de sistemas ni siquiera a nivel de clase.Son una herramienta que pueden utilizar los desarrolladores al codificar.

Ni siquiera trato a los tipos anónimos como tipos per se.Los uso principalmente como tuplas anónimas a nivel de método.Si consulto la base de datos y luego manipulo los resultados, prefiero crear un tipo anónimo y usarlo en lugar de declarar un tipo completamente nuevo que nunca se usará ni se conocerá fuera del alcance de mi método.

Por ejemplo:

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

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

A nadie le importa `a, el tipo anónimo.Está ahí para que no tengas que declarar otra clase.

Otros consejos

De LINQ en acción (página 76, sección 2.6.3):

...Los tipos anónimos [son] una gran herramienta para obtener resultados temporales rápidos y simples.No necesitamos declarar clases para contener resultados temporales gracias a los tipos temporales.

Básicamente son útiles para mantener información en el ámbito local temporalmente.Cualquier cosa más requiere el uso de la reflexión y puede convertirse en un gran problema.El ejemplo que dan en el libro citado anteriormente está escrito para consolar la identificación, el nombre y la cantidad de memoria que ocupa cada proceso en ejecución.Crean un tipo anónimo, lo agregan a una lista (todo en una declaración) y luego usan ObjectDumper para generarlo.Por lo tanto, el código ya no necesita una clase declarada por separado para contener la identificación, el nombre y la memoria utilizados, sino que todo se declara implícitamente, lo que lleva la cuenta regresiva a 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);

El uso más popular de tipos anónimos es para especificar proyecciones en una consulta LINQ to SQL.

Esta consulta

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

se convertirá a este SQL:

SELECT Column1, Column2 AS Alias2 FROM Table1

Con tipos anónimos, puede crear proyecciones ad hoc sin definir el tipo de antemano.El compilador definirá el tipo por usted.

Cuando crea tipos para fines de 'Usar y tirar'.Esto parece deberse a LINQ.Parece ser una forma de crear estructuras con campos sobre la marcha para una consulta LINQ.Devolver una estructura/tipo solo con campos especificados.Si no fuera por esto, tendría que declarar un tipo .Net para cada combinación única de campos que desee recuperar.

Úsalos con Linq.

Es importante saber que LINQ no le obliga a utilizar tipos anónimos.También puedes escribir construcciones de objetos normales después de seleccionar.

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

Esto le impide realizar una programación de reflejos fea.

@Wouter:

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

donde ID y NOMBRE son bienes inmuebles de su clase Persona.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top