c# - programacion - que es c sharp
¿Cómo deberían usarse los tipos anónimos en C#? (7)
Úselos con Linq.
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 que los tipos anónimos pueden usarse para abordar en un programa bien diseñado?
Cuando crea tipos para fines de "Usar y tirar". Esto parece haber venido debido a LINQ. Parece ser una forma de crear estructuras con campos sobre la marcha para una consulta LINQ. Devolver una estructura / tipo con campos especificados solamente. Si no fuera por esto, tendría que declarar un tipo .Net para cada combinación única de campos que desea recuperar.
Desde LINQ en acción (página 76, sección 2.6.3):
... tipos anónimos [son] una gran herramienta para resultados temporales rápidos y simples. No necesitamos declarar clases para mantener resultados temporales gracias a los tipos temporales.
Básicamente, son útiles para mantener temporalmente la información en el ámbito local. 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 tomada por cada proceso en ejecución. Crean un tipo anónimo, lo agregan a una lista (todas las declaraciones) 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 utilizada, pero todo se declara implícitamente reduciendo el recuento de líneas 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);
Los tipos anónimos no tienen nada que ver con el diseño de sistemas o incluso a nivel de clase. Son una herramienta para que los desarrolladores utilicen al codificar.
Ni siquiera trato 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 usar eso en lugar de declarar un tipo completamente nuevo que nunca se usará o 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 tenga que declarar otra clase.
El uso más popular de tipos anónimos es para especificar proyecciones en una consulta LINQ a 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 previamente el tipo. El compilador definirá el tipo para usted.
@Wouter:
var query = from item in database.Items
select new Person
{
ID =item.id,
NAME= item.Name
};
donde ID y NAME son propiedad real de su clase Person.
Es importante saber que LINQ no lo obliga a usar tipos anónimos. También puede 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 una programación fea de reflexión.