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方法为我们提供了快速精确或

缓慢松懈的选择。

   关于这个问题解决办法也有了,但是问题的本质还是没有理解到位,请大牛们指点。

 

    

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

posted @ 2017-03-31 14:31  GDOUJKZZ  阅读(32698)  评论(0编辑  收藏  举报