static void Main(string[] args)
{
Int32 i = 10; object obj = new object(); //裝箱操作,通常沒有異常 try { obj = i; Console.WriteLine("裝箱成功!"); } catch (Exception ex) { Console.WriteLine("裝箱失敗:"+ex.Message);
return; } //拆箱操作,易產(chǎn)生隱患 try { Int64 j = (Int64)obj; Console.WriteLine("拆箱成功!"); } catch (Exception ex) { Console.WriteLine("拆箱失敗:"+ex.ToString()); } Console.Read();
}
分析:程序會(huì)拋出InvalidCastException類型的異常,這個(gè)異常的含義是無效類型轉(zhuǎn)換或是顯式轉(zhuǎn)換引發(fā)異常。這說明該異常是因被拆箱對象的最初類型與拆箱時(shí)的值類型不一致而產(chǎn)生的。同時(shí)也論證了拆箱時(shí)的一條原則:被拆箱對象的最初類型與拆箱時(shí)的值類型必須一致!
解決:
try{Int64 j = (Int64)(Int32)obj;Console.WriteLine("拆箱成功!");}catch (Exception ex){Console.WriteLine("拆箱失敗:"+ex.ToString());}
技巧:裝箱和拆箱操作會(huì)影響系統(tǒng)性能。并且拆箱操作容易產(chǎn)生隱患,所以建議在可以確定值類型的情況下,應(yīng)該盡可能的使用泛型技術(shù)來處理,這樣可以避免大量地使用拆箱和裝箱操作。
|
新聞熱點(diǎn)
疑難解答
圖片精選