拆箱存在的隐患

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());
}

 

技巧:装箱和拆箱操作会影响系统性能。并且拆箱操作容易产生隐患,所以建议在可以确定值类型的情况下,应该尽可能的使用泛型技术来处理,这样可以避免大量地使用拆箱和装箱操作。

转载于:https://www.cnblogs.com/vakeynb/p/4009673.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值