2014-11-21 39 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

相關問題