亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能將int開箱為小數?

為什么我不能將int開箱為小數?

C#
開心每一天1111 2019-09-24 15:06:40
我有一個IDataRecord reader我從如下檢索小數:decimal d = (decimal)reader[0];由于某種原因,這將引發無效的強制轉換異常,指出“指定的強制轉換無效”。當我這樣做時,reader[0].GetType()它告訴我它是一個Int32。據我所知,這應該不是問題。我已經通過這個片段進行了測試,效果很好。int i = 3750;decimal d = (decimal)i;這讓我scratch不解,想知道為什么它無法將裝在閱讀器中的int裝箱為小數。有誰知道為什么會這樣?我想念些什么嗎?
查看完整描述

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方法的方法調用)。


查看完整回答
反對 回復 2019-09-24
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

轉換為intto 沒問題decimal,但是當您將一個對象拆箱時,您必須使用該對象包含的確切類型。


要將int值拆箱為decimal值,請先將其拆為int型,然后將其強制轉換為十進制:


decimal d = (decimal)(int)reader[0];

IDataRecord接口還具有將值拆箱的方法:


decimal d = (decimal)reader.GetInt32(0);


查看完整回答
反對 回復 2019-09-24
  • 3 回答
  • 0 關注
  • 443 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號