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; } //拆箱操作,易产生隐患 try { Int64 j = (Int64)obj; Console.WriteLine("拆箱成功!"); } catch (Exception ex) { Console.WriteLine("拆箱失败:"+ex.ToString()); } Console.Read(); }
分析:程序会抛出InvalidCastException类型的异常,这个异常的含义是无效类型转换或是显式转换引发异常。这说明该异常是因被拆箱对象的最初类型与拆箱时的值类型不一致而产生的。同时也论证了拆箱时的一条原则:被拆箱对象的最初类型与拆箱时的值类型必须一致!
解决:
try { Int64 j = (Int64)(Int32)obj; Console.WriteLine("拆箱成功!"); } catch (Exception ex) { Console.WriteLine("拆箱失败:"+ex.ToString()); }
技巧:装箱和拆箱操作会影响系统性能。并且拆箱操作容易产生隐患,所以建议在可以确定值类型的情况下,应该尽可能的使用泛型技术来处理,这样可以避免大量地使用拆箱和装箱操作。