Inicializar a null propiedades sin tipo

No es algo que ocurra muy frecuentemente, pero en determinadas ocasiones puede ser útil inicializar una propiedad de un tipo anónimo con el valor nulo, por ejemplo:

var conductor = new { Nombre = ”Marisa”, Edad = 34, Auto = “Renault Megane” };
var peaton = new { Nombre = “Juan”, Edad = 43, Auto = null };

En el código anterior se entiende que lo que queremos indicar estableciendo la propiedad Auto a null es que la persona que estamos representando no dispone de automóvil, o bien no conocemos este dato.

Algo muy normal… sino fuera porque el compilador se empeña en abofetearnos con el siguiente error:

Cannot assign <null> to anonymous type property

Y la verdad, en cuanto lo pensamos un poco, tiene sentido. En los casos anteriores, se está instanciando un tipo anónimo cuyas propiedades son generadas en tiempo de compilación. En el caso anterior, el compilador crearía para el tipo anónimo una propiedad “Nombre” de tipo string, una “Edad” de tipo integer, y una “Auto”, de tipo… ¿qué tipo podría asignar el compilador a esta propiedad? Ese es precisamente el problema.

Lo mismo ocurre al intentar inicializar variables implícitamente tipadas con el valor nulo; aunque cambia el error, el concepto idéntico, el compilador no es capaz de inferir el tipo de la variable:

var persona = null; // Error: Cannot assign <null> to an implicitly-typed local variable

La forma de solucionarlo en ambos casos es muy sencilla: basta con informar explícitamente al compilador del tipo de la propiedad, para que pueda crearla sin problema, por ejemplo así:

var peaton = new { Nombre = "Juan", Edad = 43, Auto = (string)null };

var persona = null as Persona;

Publicado en: Variable not found

2 comentarios sobre “Inicializar a null propiedades sin tipo”

  1. Buen post!

    Siempre he pensado que los tipos anónimos en C# están muy descafeinados…

    Deberían poder implementar interfaces y ser devueltos a través de una referencia a dicho interfaz (lo que los haría algo más útiles que ahora) e incluso derivar de clases no anónimas. Y también deberíamos poder decidir si queremos un tipo anónimo por referencia o por valor…

    Pero en fin… supongo que todo llegará (o no, quien sabe).

    Saludos!!! 😉

  2. Gracias, Eduard!

    Pues sí, los tipos anónimos son mejorables, sin duda, pero quizás era demasiado fuerte meter tantas novedades juntas… además, de momento cubrieron las necesidades inmediatas del framework (más que nada Linq).

    Pues eso… a ver si en el futuro también van evolucionando, como otras características del lenguaje.

    Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *