Pregunta

He estado intentando ponerme al día con algunas de las funciones más nuevas de C# y una de ellas que no he tenido ocasión de usar son los tipos anónimos.

Entiendo el uso en lo que respecta a las consultas LINQ y miré esta publicación SO que hizo una pregunta similar.La mayoría de los ejemplos que he visto en la red están relacionados con consultas LINQ, lo cual es genial.También vi algunos ejemplos un tanto artificiales, pero en realidad no vi nada en lo que viera mucho valor.

¿Tiene algún uso novedoso para los tipos anónimos que cree que realmente le proporciona alguna utilidad?

¿Fue útil?

Solución

Con un poco de reflexión, puedes convertir un tipo anónimo en un Diccionario<cadena, objeto>;Roy Osherove bloguea su técnica para esto aquí: http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx

Jacob Carpenter utiliza tipos anónimos como una forma de inicializar objetos inmutables con una sintaxis similar a la inicialización de objetos: http://jacobcarpenter.wordpress.com/2007/11/19/named-parameters-part-2/

Los tipos anónimos se pueden utilizar como una forma de proporcionar alias más fáciles de leer a las propiedades de los objetos de una colección que se itera con un foreach declaración.(Aunque, para ser honesto, esto no es más que el uso estándar de tipos anónimos con LINQ a objetos.) Por ejemplo:

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);

Si bien no hay mucha mejora en esta breve muestra, si el foreach bucle eran más largos, refiriéndose a ID y Name podría mejorar la legibilidad.

Otros consejos

El enrutamiento ASP.NET MVC utiliza estos objetos por todas partes.

De vez en cuando sospecho que puede ser útil realizar algo que es como una consulta LINQ, pero no utiliza LINQ, pero aún así desea una proyección de algún tipo. No creo que use tipos anónimos en su forma actual para nada radicalmente diferente a las proyecciones de LINQ.

Una cosa que me gustaría ver es la capacidad de crear " llamado " tipos con declaraciones simples, que generarían las propiedades y el constructor de la misma manera que para los tipos anónimos, así como anular Equals / GetHashCode / ToString de la misma manera (útil). Esos tipos se podrían convertir en & Quot; normal & Quot; tipos cuando surgió la necesidad de agregar más comportamiento.

Nuevamente, no creo que lo use con demasiada frecuencia, pero de vez en cuando la habilidad sería útil, particularmente dentro de unos pocos métodos de una clase. Quizás esto podría ser parte de un esfuerzo mayor para brindar más soporte a los tipos inmutables en C # 5.

Para agregar a lo que dijo Justice, ASP.Net MVC es el primer lugar en el que he visto que se usan de manera interesante y útil. Aquí hay un ejemplo:


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

ASP.Net MVC utiliza tipos anónimos como este para agregar atributos arbitrarios a elementos HTML. Supongo que hay varias maneras diferentes de lograr lo mismo, pero me gusta el estilo conciso de los tipos anónimos, da a las cosas una sensación de lenguaje más dinámico.

El mayor uso para los tipos anónimos es LINQ, de hecho, es por eso que se creó.

Supongo que una razón para un tipo anónimo fuera de linq es crear un objeto temporal tipo estructura, por ejemplo:

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

Eso puede hacerte la vida un poco más fácil en algunas situaciones.

Los he usado para hacer correos electrónicos con plantillas, ya que son geniales si estás usando reflexión y genéricos.

Puede encontrar alguna información aquí: http: //www.aaron- powell.com/blog.aspx?id=1247

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