miércoles, 6 de mayo de 2015

Propiedades dinámicas en C# (ExpandoObject)

¿Alguna vez te has preguntado si se pueden agregar propiedades de forma dinámica (en tiempo de ejecución) a los objetos?

Si has trabajado con MVC seguramente te es familiar el objeto ViewBag, al cual podemos agregar propiedades de forma dinámica.

Para poder utilizar propiedades dinámicas en C#, vamos a unir dos componentes: el tipo de datos dynamic y la clase ExpandoObject.

Si quieres saber un poco más sobre el tipo de datos dynamic, puedes revisar éste post.

La clase ExpandoObject (System.Dynamic) fue lanzada en el framework 4.0 y en conjunto con el tipo de datos dynamic nos permite tener objetos a los cuales podemos agregar propiedades dinámicas.

Únicamente tenemos que crear una variable de tipo dynamic e inicializarla como ExpandoObject, eso nos permitirá agregar propiedades dinámicas y poder consultarlas después.

Para crear cada propiedad, únicamente tenemos que asignarle un valor:



Las propiedades que hemos agregado son de tipo dynamic, lo que nos permite cambiar el tipo de datos.

Sin embargo, una de las desventajas es que al igual que con dynamic, no tenemos intelisense por parte del IDE.

Debemos tener cuidado al tratar de obtener el valor a una propiedad, ya que podemos originar una excepción de tipo RuntimeBinderException que surge en tiempo de ejecución: