2010-12-04 7 views
8

Este código se ejecuta bienCant flotador fundido a int si el objeto

float ff = 5.5f; 
int fd = (int) ff; 

Console.Write(fd); 

Donde como ésto no código

float ff = 5.5f; 
object jf = ff; 
int fd = (int) jf; 

Console.Write(fd); 

¿Qué regla en el corredor hace que esto suceda?

Respuesta

13

Puede lanzar un flotante a un int, pero no puede convertir en caja flotante en un int - primero debe destrabarlo.

int fd = (int)(float)jf; 

Leer el post de Eric Lippert Representation and Identity para más detalles.

6
float ff = 5.5f; 
object jf = ff; 
int fd = (int) jf; 

aquí cuando caja desde flotador para oponerse, el tipo real que es jf flotador y que se unboxing un flotador en caja directamente a int que no es aceptado por el tiempo de ejecución.

por lo que necesita primero unboxed para flotar y luego lanzar de nuevo a int.