2014-11-21 78 views
1

我在互联网上看到以下代码。任何人都可以向我解释它是什么吗?如果我的头衔是错的,我会改变它,如果我得到一个正确的答案:转换为多种可能的类型?

public static void Calculate(float amount) 
{ 
    object amountRef = amount; 
    int balance = (int)(float)amountRef; 
    Console.WriteLine(balance); 
}; 

是什么(int)(float)做什么呢?它很难在互联网上找到解释。

+0

搜索铸造 – fubo 2014-11-21 10:14:16

+0

我知道它关于铸造,但为什么有两种可能的类型int + float? – Ozkan 2014-11-21 10:14:46

+1

首先将其转换为浮点数,然后将结果转换为int。 – Dirk 2014-11-21 10:14:58

回答

6

它是关于boxing and unboxing

如果您保存floatobject(这是拳击),您需要与原型第一拆箱它。比你的程序投它int

这就是为什么你不能说;

object amountRef = amount; 
int balance = (int)amountRef; 

你会得到;

Specified cast is not valid. Error: Incorrect unboxing

+0

谢谢@SonerGönül:) – Ozkan 2014-11-21 10:20:08

+2

没错。第一个“cast”是从“object”到“float”的拆箱转换。这涉及跟踪对象引用,查找值并将其放在调用堆栈中(或者存储在CPU寄存器中或以前)。第二个“cast”是从浮点表示到带符号(2的补码)整数表示的数值转换。它涉及到找到一个新的二进制表示。精度可能会丢失,或者结果可能很奇怪,因为数字对于int而言太大了。 – 2014-11-21 10:21:57

3

你正在推翻这一点(如果你已经知道铸造服务的目的)。

几个额外的括号中可以更清楚:

(int)((float)amountRef) 

amountRef被转换为float,这个新float然后强制转换为int

+1

这使得这一切都清楚,谢谢:) – Ozkan 2014-11-21 10:18:21

+0

没问题。正如Soner所建议的,如果您还不熟悉这一过程,您也会从中受益。 – 2014-11-21 10:19:05

相关问题