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

Des*_*ted 8 c# casting

这段代码运行正常

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

Console.Write(fd);
Run Code Online (Sandbox Code Playgroud)

这个代码不在哪里

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

Console.Write(fd);
Run Code Online (Sandbox Code Playgroud)

跑步者的规则是什么导致这种情况发生?

Mar*_*ers 14

您可以将浮点数强制转换为int,但不能将盒装浮点数转换为int - 您必须先将其取消装箱.

int fd = (int)(float)jf;
Run Code Online (Sandbox Code Playgroud)

阅读Eric Lippert的帖子陈述和身份以获取更多详细信息.


Tal*_*ner 6

float ff = 5.5f; 
object jf = ff;
int fd = (int) jf;
Run Code Online (Sandbox Code Playgroud)

在这里,当你从浮到对象,实际类型的JF是浮动框,你是一个拆箱装箱的浮动直接为int未运行时所接受.

所以你需要首先将unboxed浮动然后再次转换为int.