zoukankan      html  css  js  c++  java
  • 拆箱存在的隐患

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

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

    ——当我们面对枯燥窘迫甚至是痛苦的生活时,只是缺少了提枪上阵去干他娘的勇气!
  • 相关阅读:
    WIndows 常见问题解决方案合集
    【日常摘要】- RabbitMq实现延时队列
    【工具】- HttpClient篇
    【java面试】- 集合篇
    【Java面试】- 并发容器篇
    【mysql】- 锁篇(上)
    【mysql】- 锁篇(下)
    【mysql】- 事务隔离级别和MVCC篇
    【mysql】- 索引使用篇
    【mysql】- 索引简介篇
  • 原文地址:https://www.cnblogs.com/vakeynb/p/4009673.html
Copyright © 2011-2022 走看看