0
我陌生感跑:怪施放對象的行爲,升C
var k = (decimal?)(int?)1; //valid cast
var p = (decimal?)(int?)(object)(int?)1; //valid cast
var l = (decimal?)(object)(int?)1; //Specified cast is not valid
有人可以解釋爲什麼出現這種情況?
我陌生感跑:怪施放對象的行爲,升C
var k = (decimal?)(int?)1; //valid cast
var p = (decimal?)(int?)(object)(int?)1; //valid cast
var l = (decimal?)(object)(int?)1; //Specified cast is not valid
有人可以解釋爲什麼出現這種情況?
第一投是:
int
到int?
int?
到decimal?
轉換都有效。
第二種情況是:
int
到int?
int?
int
這最終)的對象int?
int?
到decimal?
所有這些轉換都是有效的。
第三種情況是:
int
到int?
int?
int
結束)的對象decimal?
最後此處的轉換無效 - 您只能將相同的值類型或其可爲空的等價物取消裝箱。 (實際上CLR比這更寬容一些,但在這種情況下這沒什麼關係。)
在每種情況下轉換爲int?
實際上是不相關的。對可空類型的拆箱也有點不相關,因爲對可空類型進行拆箱就像將其拆箱爲不可空類型,除了將空引用拆箱爲空值。鑑於這裏沒有空值,您的最終示例等同於:
object o = 1; // Boxing
decimal d = (decimal) o; // Unboxing, but to the wrong type
'(decimal?)(object)1' - 指定的轉換無效 – Oded 2012-08-02 12:42:20