如果对象,则不能将float转换为int

时间:2010-12-04 08:44:40

标签: c# casting

此代码运行正常

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

Console.Write(fd);

这段代码不在哪里

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

Console.Write(fd);

跑步者的规则会导致这种情况发生吗?

2 个答案:

答案 0 :(得分:14)

你可以将一个浮点数转换为int,但你不能将盒装的浮点数转换为int - 你必须先将它取消装箱。

int fd = (int)(float)jf;

阅读Eric Lippert的帖子Representation and Identity了解更多详情。

答案 1 :(得分:6)

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

这里当你从float到object时,jf是float的实际类型,你将一个盒装的float直接拆箱到int,这是运行时不接受的。

所以你需要首先取消装箱才能浮动然后再投射到int。