3 回答

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
您只能將值類型拆箱為其原始類型(以及該類型的可空版本)。
順便說(shuō)一句,這是有效的(只是您的兩行版本的縮寫(xiě)):
object i = 4;
decimal d = (decimal)(int)i; // works even w/o decimal as it's a widening conversion
出于此原因,請(qǐng)閱讀Eric Lippert的博客條目:表示和身份
就我個(gè)人而言,我將通過(guò)轉(zhuǎn)換語(yǔ)法完成的工作歸類為四種不同類型的操作(它們都有不同的IL指令):
裝箱(boxIL指令)和拆箱(unboxIL指令)
通過(guò)繼承層次結(jié)構(gòu)進(jìn)行轉(zhuǎn)換(如dynamic_cast<Type>C ++中一樣,使用castclassIL指令進(jìn)行驗(yàn)證)
基本類型之間的轉(zhuǎn)換(像static_cast<Type>在C ++中一樣,對(duì)于基本類型之間的不同類型的轉(zhuǎn)換,有很多IL指令)
調(diào)用用戶定義的轉(zhuǎn)換運(yùn)算符(在IL級(jí)別,它們只是對(duì)適當(dāng)op_XXX方法的方法調(diào)用)。

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
轉(zhuǎn)換為intto 沒(méi)問(wèn)題decimal,但是當(dāng)您將一個(gè)對(duì)象拆箱時(shí),您必須使用該對(duì)象包含的確切類型。
要將int值拆箱為decimal值,請(qǐng)先將其拆為int型,然后將其強(qiáng)制轉(zhuǎn)換為十進(jìn)制:
decimal d = (decimal)(int)reader[0];
IDataRecord接口還具有將值拆箱的方法:
decimal d = (decimal)reader.GetInt32(0);
- 3 回答
- 0 關(guān)注
- 436 瀏覽
添加回答
舉報(bào)