2015-08-25 79 views
1

我正在準備考試,並且偶然發現有關拳擊/拆箱的問題。 我一直覺得,如果我框比方說,一個浮動是這樣的:將盒裝浮法拆箱到int

float x = 4.5f; 
object o = x; 

如果想要一個值類型變量從o回來了,我必須把它拆箱爲float。

float y = (float)o; 

這應該拋出一個異常:

​​

如果我想保存在o值轉換爲int我必須先拆箱它和後來投這樣的:

int z = (int)(float)o; 

現在我偶然發現的問題:

假設你有一個方法像這樣:

public static void FloorTemperature(float degrees) { 
    object degreesRef = degrees; 
    `xxx` 
    Console.WriteLine(result); 
} 

您需要確保應用程序不會在無效轉換時拋出異常。你應該插入哪個代碼段爲xxx(我認爲無效的轉換是無效的轉換異常):

(一)int result = (int)degreesRef; (B)int result = (int)(float)degreesRef;

正確的解決方法是(A),但對我來說(B)看起來正確。所以你能開導我嗎?我錯過了什麼?

親切的問候

+0

那麼你有沒有嘗試驗證'a'是否有效?這看起來很容易測試,實際上它看起來應該是'b'。 –

+0

不幸的是,我沒有在我的機器上安裝Visual Studio:/ – user3596113

+0

因此,請等到您*在適合的機器上。或者使用csharppad.com。或者,如果您使用的機器有.NET但不是VS,請使用記事本和csc。 –

回答

2

你是不是缺少什麼

答案應該是(B),因爲:

(一)拋出一個異常,因爲你想投objectint

(b)自第一次投擲到float以來,您將它投射到int,它將其四捨五入,但不會引發異常。