Specified cast is not valid(C#) 引發的思考(裝箱,拆箱本質)


    沒有很華麗的語言,直接拿代碼說事情把。

     

     這段代碼,會報錯嗎?  結論:當然不會

     

    這段代碼會報錯了。原因是為啥? 這里面的水比較深。也要提醒各位寫代碼的適合要引起注意。異常:System.InvalidCastException: Specified cast is not valid.

    先來分析下為毛會報錯。  我們知道,裝箱操作,是可以把任意類型進行裝箱操作的,但是我們是不是可以拆箱成我們需要的類型呢。

    var test=(long)obj; 編譯器知道obj是object類型的對象。拆箱的時候,編譯器生成一個拆箱的指令,假設這是一個拆箱的為int類型,然后將int

類型轉換為long類型的自定義指令序列。假設這是一個雙重的相同的盒子,但是不同說明等等,對於所有內置整數的轉換。這個代碼將會非常大

這個將是非常慢的。所以說,編譯器在進行拆箱的時候,只能取消選中確切的類型。...

    要解決這個問題:采用Convert.ToInt64既可以解決。 這個convert.to方法為我們提供了快速精確或

緩慢松懈的選擇。

   關於這個問題解決辦法也有了,但是問題的本質還是沒有理解到位,請大牛們指點。

 

    

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM