Informática e Internet

Uso de tipos Nullable<> con el operador ternario

La introducción en la plataforma .NET de los tipos Nullable<> nos facilitó bastante la vida al evitarnos a los desarrolladores el engorro de tener que definir un valor para los tipos valor numéricos que hiciera las veces de nulo.

Pero hay ocasiones en los que el uso de los tipos Nullable<> no está del todo claro, y uno de estos casos es su empleo dentro de operaciones en las que se involucra al operador ternario. Imaginemos la siguiente operación…

int? entero = (obj1.Codigo > obj2.Codigo) ? null : 1;

A priori parece correcta, pero el compilador nos informará de que se ha producido un error en tiempo de diseño. Esto ya nos da una pista del posible error que estamos cometiendo. Recordemos que los tipo Nullable<> son genéricos, por lo que el compilador chequea que todo lo que se usa con el tipo definido como Nullable<> sea de su mismo tipo.

En este caso vemos que la operación asigna dos posibles valores, 1, que es un valor del tipo Int32 y null. Pero entonces… ¿dónde está el error? Pues aunque no lo parezca el error de tipo se encuentra en el null. Para que el operador ternario acepte la operación tenemos que hacer un casting al valor null, de tal manera que si la operación se escribe de esta manera…

int? entero = (obj1.Codigo > obj2.Codigo) ? (int?) null : 1;

…funcionará correctamente en tiempo de diseño y ejecución.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s