转换为多种可能的类型?

Ozk*_*kan 1 c#

我在互联网上看到了以下代码.任何人都可以向我解释它的作用吗?如果我的标题错了,如果我得到正确答案,我会改变它:

public static void Calculate(float amount)
{
   object amountRef = amount;
   int balance = (int)(float)amountRef;
   Console.WriteLine(balance);
};
Run Code Online (Sandbox Code Playgroud)

究竟(int)(float)做了什么?很难在互联网上找到解释.

Son*_*nül 6

这是关于拳击和拆箱.

如果您保存floatobject(正在装箱)中,则需要先将其与原始类型一起取消.比你的程序把它投入int.

这就是你不能说的原因;

object amountRef = amount;
int balance = (int)amountRef;
Run Code Online (Sandbox Code Playgroud)

你会得到;

指定演员表无效.错误:取消装箱不正确

  • 究竟.第一个"强制转换"是从"对象"到"浮动"的拆箱转换.这涉及跟随对象引用,找到值并将其放在调用堆栈上(或在CPU寄存器中或在任何地方).第二个"强制转换"是从浮点表示到带符号(2的补码)整数表示的数字转换.它涉及寻找新的二进制表示.精度可能会丢失,或者结果可能很奇怪,因为数字对于"int"来说太大了. (2认同)