2008-10-03 46 views
5

He estado tratando de ponerme al día sobre algunas de las funciones más nuevas en C# y una de ellas que no he tenido ocasión de usar es de tipo anónimo.Aparte de las consultas LINQ, ¿cómo se usan los tipos anónimos en C#?

Entiendo el uso en lo que respecta a las consultas LINQ y miré en this SO post que me 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. Vi algunos ejemplos un tanto artificiales también, pero en realidad no nada en lo que vi un gran valor.

¿Tiene un uso novedoso para los tipos anónimos en los que cree que realmente le proporciona cierta utilidad?

Respuesta

6

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

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

tipos anónimos pueden ser utilizados como una forma de dar más fácil- para leer los alias de las propiedades de los objetos en una colección que se itera con una declaración foreach. (Aunque, para ser honesto, esto no es más que el uso estándar de los tipos anónimos con LINQ to Objects.) 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 este breve muestra, si el bucle foreach eran más largos, refiriéndose a ID y Name podría mejorar la legibilidad.

2

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

supongo que una de las razones para un tipo anónimo fuera de LINQ es crear un objeto temporal estructura similar, por ejemplo .:

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

que pueden hacer su vida un poco más fácil en algunas situaciones.

+0

Gracias por la respuesta. Supongo que estoy buscando una de esas situaciones en las que me gustaría hacer eso. – itsmatt

5

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

3

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

Una cosa que gustaría gustaría ver es la capacidad de crear tipos "con nombre" con declaraciones simples, lo que generaría las propiedades y constructor de la misma forma que para los tipos anónimos, así como primordial es igual a/GetHashCode/ToString de la misma manera (útil). Esos tipos podrían convertirse en tipos "normales" cuando surge la necesidad de agregar más comportamiento.

Una vez más, no creo que lo use con demasiada frecuencia, pero de vez en cuando la capacidad sería útil, especialmente con algunos métodos de una clase. Esto podría ser parte de un esfuerzo mayor para dar más soporte a los tipos inmutables en C# 5.

3

Para agregar a lo que dijo Justice, ASP.Net MVC es el primer lugar en el que he visto que se utilizan de formas interesantes y útiles.He aquí un ejemplo:


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

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

+0

¡Gracias por tu aporte! – itsmatt

1

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

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

+0

Gracias por su aporte - Voy a echar un vistazo. – itsmatt

Cuestiones relacionadas