我有以下代碼:奇怪的鑄造行爲。不能投射對象(int)以長
int intNumber1 = 100;
object intNumber2 = 100;
bool areNumberOfTheSameType = intNumber1.GetType() == intNumber2.GetType(); // TRUE
bool areEqual = intNumber1.Equals(intNumber2); // TRUE
long longNumber1 = (long) intNumber1; // OK
long longNumber2 = (long) intNumber2; // InvalidCastException. Why?
爲什麼沒有第二科協工作?我意識到這可能是因爲該對象沒有明確的轉換時間,但如果我們在運行時查看它的類型,它是System.Int32
。
如果我使用var
或dynamic
而不是object
,它可以工作。
有什麼想法?
嘗試將其更改爲 'long longNumber2 =(long)(int)intNumber2;' – 2010-08-22 13:50:21
爲什麼要在此實例中使用對象而不是var?它更好地保持變量儘可能強烈鍵入 – 2010-08-22 13:55:46
@ Quinn351:我的猜測是,上面的代碼說明了用戶有一個簡化的問題,我不認爲我們應該把它作爲當前的做法。 – Abel 2010-08-22 13:58:48