2010-12-04 19 views
8

Ce code fonctionne bienflotteur coulé Cant type int si l'objet

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

Console.Write(fd); 

Où que ce code ne marche pas

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

Console.Write(fd); 

Quelle est la règle dans le coureur cause que cela se produise?

Répondre

13

Vous pouvez lancer un flottant vers un int, mais vous ne pouvez pas lancer un flotteur en boîte dans un int - vous devez d'abord le déballer.

int fd = (int)(float)jf; 

poste Read Eric Lippert Representation and Identity pour plus de détails.

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

ici lorsque vous Boîte de flotteur objet, type réel qui est jf flottant et vous êtes unboxing un flotteur en boîte directement int qui n'est pas acceptée par le moteur d'exécution. Vous avez donc besoin d'abord d'unboxed pour flotter puis de lancer une nouvelle fois vers int.