2013-07-15 123 views
-1

我與SharePoint中的一小段代碼的工作,即是這樣的:無法從雙強制轉換爲int

int? do_ = (int?)re["mi"]; // consider "re" a dictionary<string, object>; 

等號右邊的表達式計算結果爲Double。爲了使double確定,我double - 在監視窗口中檢查它((D))。是的,這是一個System.Double,進出。

然而,該行會拋出異常:

指定的轉換無效。

我正準備用額頭在我的桌子上留下一個凹痕,當我意識到是的時候,你可以將double轉換爲int,儘管丟失了非整數部分的值(這實際上是用於我的情況)。我在編程的第一天就學會了這一點,在世界繼續前進。

所以爲了更確定,我創建了另一個解決方案,一個簡單的控制檯應用程序。我把這個代碼放進去:

double dragon = 2.0; 
int? i = (int?)dragon; 

它和預期的一樣有效。

爲什麼它會在一個環境中工作,但在另一個環境中會失敗?

+0

嘛。我知道你在某個地方發生了事情:沒有這種東西像'客體?'。 –

+0

@newStackExchangeInstance對不起,修復它。 – Renan

回答

2

但是,這應該爲你工作

(int?)(double)re["mi"]; 

EDIT1 上面的代碼將工作,如果盒裝類型是雙,如果不工作它是double? 使其工作做以下工作

(int?)(double?)re["mi"]; 
+1

你不覺得它應該是'(int?)(double?)re [「mi」]' - 如果'object'引用不是一個帶有'double'但實際上是'null'引用的框,那麼你需要一路暢通。雖然可能效率不高。 –

+0

@JeppeStigNielsen是的,但有問題,他提到,這是一個雙重 –

+0

@JeppeStigNielsen:首先,這不可能是瓶頸。其次,Roslyn在優化嵌套解除轉換方面做得相當不錯,儘管原始配方C#編譯器不太好。看到我的系列文章http:// ericlippert。com/2012/12/20/nullable-micro-optimizations-part-one /描述可空算術優化器的工作原理。部分特別是鍺烷。 –

0

這是因爲您試圖將對象轉換爲整數。你的小數值被裝盒。

Conciser這樣的:

object o = 2.0d; 

int i = (int)((double) o); // This will work 
相關問題