3 回答
TA貢獻1846條經驗 獲得超7個贊
您只能將值類型拆箱為其原始類型(以及該類型的可空版本)。
順便說一句,這是有效的(只是您的兩行版本的縮寫):
object i = 4;
decimal d = (decimal)(int)i; // works even w/o decimal as it's a widening conversion
出于此原因,請閱讀Eric Lippert的博客條目:表示和身份
就我個人而言,我將通過轉換語法完成的工作歸類為四種不同類型的操作(它們都有不同的IL指令):
裝箱(boxIL指令)和拆箱(unboxIL指令)
通過繼承層次結構進行轉換(如dynamic_cast<Type>C ++中一樣,使用castclassIL指令進行驗證)
基本類型之間的轉換(像static_cast<Type>在C ++中一樣,對于基本類型之間的不同類型的轉換,有很多IL指令)
調用用戶定義的轉換運算符(在IL級別,它們只是對適當op_XXX方法的方法調用)。
TA貢獻1844條經驗 獲得超8個贊
轉換為intto 沒問題decimal,但是當您將一個對象拆箱時,您必須使用該對象包含的確切類型。
要將int值拆箱為decimal值,請先將其拆為int型,然后將其強制轉換為十進制:
decimal d = (decimal)(int)reader[0];
IDataRecord接口還具有將值拆箱的方法:
decimal d = (decimal)reader.GetInt32(0);
- 3 回答
- 0 關注
- 443 瀏覽
添加回答
舉報
