2011-03-15 8 views
13

¿Por qué un int que no se ha encapsulado se puede convertir directamente en double?Fundición de un valor en caja

object o = 12; 
double d = (double)o; 

Eso arroja una excepción de lanzamiento no válido. En su lugar, parece que primero debe emitirse como int, y luego a double.

object o = 12; 
double d = (double)(int)o; 

estoy seguro de la respuesta simple es "porque así es como funciona el boxeo", pero estoy esperando que alguien podría arrojar un poco de luz aquí.

+19

Ver: [Representación e Identidad - fabulosas aventuras en la codificación] (http://blogs.msdn.com/b /ericlippert/archive/2009/03/19/representation-and-identity.aspx) – Ani

+1

@Ani - Pon eso como respuesta, ¡y lo votaré en un segundo! –

+0

Ditto - ani - parece ser la respuesta correcta para mí –

Respuesta

8

Salida a esta pregunta desde el día de hoy: Why am I getting InvalidCastException?

operaciones Unboxing sólo tienen éxito si el tipo de destino es exactamente el mismo que el tipo original que fue en caja, por lo que se produce una excepción. This link que proporcionó John Leidegren explica en detalle.

5

Si usted no sabe el tipo de original en tiempo de compilación:

object o = 12; 
double d = (double)Convert.ChangeType(o, typeof(double));