
Dynamic Types en C# 4.0
Existe un problema con los tipos anónimos (anonymous types) respecto al hecho de que no se pueden utilizar fuera del scope de su método.
Debido a esto, si se crea un IEnumerable de variables de tipo anónimo, y se quiere usar fuera de su dominio, previamente se tenían muy pocas opciones:
1. Renunciar al tipo anónimo y escribir una clase para mantener los datos.
2. Utilizar reflection . Esto funciona, pero es un poco lento.
3. Usar un árbol de expresiones. Esto también funciona, pero la creación de un árbol de expresiones puede ser un proceso difícil y tedioso.
Ahora, en C# 4.0 con los tipos dinámicos (dynamic types), finalmente se puede llamar propiedades de los tipos anónimos desde fuera de su scope.
Considere el siguiente código:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5:
6: namespace ConsoleApplication4
7: {
8: class Program
9: {
10: static void Main(string[] args)
11: {
12: foreach (dynamic d in GetValues())
13: Console.WriteLine("{0} is {1} years old", d.Name, d.Age);
14: }
15:
16: static IEnumerable<dynamic> GetValues()
17: {
18: Dictionary<string, int> result = new Dictionary<string, int>();
19: result["David"] = 30;
20: result["Jennifer"] = 25;
21: foreach (var item in result)
22: yield return new { Name = item.Key, Age = item.Value };
23: }
24: }
25: }
Lo qué hace este código es proporcionar un IEnumerable de tipos anónimos, el que luego es utilizado fuera de scope del método , específicamente en el método Main.
Si bien esto es conveniente, hay un par de cosas a tener en cuenta:
1. Esto todavía tiene el mismo inconveniente encontrado tanto en reflection como en los arboles de expresiones. Aunque se ve fuertemente tipeado (strongly typed), no lo es. Si se cambia de Name a FirstName , por ejemplo, el código aun compilará, pero se obtendrá un error en tiempo de ejecución cuando se intente ejecutar la aplicación.
2. El Intellisense no funciona con tipos dynamic. Normalmente, esto significa que sólo debería usar la keyword en situaciones donde se está codificando cerca de la declaración del tipo.
Dicho esto, los dynamics types representan una nueva característica muy útil en C#, la cual vale la pena de explorar más profundamente. Acá se puede encontrar más información acerca de los dynamic types: Microsoft: Using Type dynamic C#
volver



Orand S.A.
contacto@orand.clEmail:
http://www.orand.clWeb:
+562 2474691Teléfonos:
+562 2474692
Estado #360Dirección:
Of.702-A
Santiago, Chile.
