没有很华丽的语言,直接拿代码说事情把。
这段代码,会报错吗? 结论:当然不会
这段代码会报错了。原因是为啥? 这里面的水比较深。也要提醒各位写代码的适合要引起注意。异常:System.InvalidCastException: Specified cast is not valid.
先来分析下为毛会报错。 我们知道,装箱操作,是可以把任意类型进行装箱操作的,但是我们是不是可以拆箱成我们需要的类型呢。
var test=(long)obj; 编译器知道obj是object类型的对象。拆箱的时候,编译器生成一个拆箱的指令,假设这是一个拆箱的为int类型,然后将int
类型转换为long类型的自定义指令序列。假设这是一个双重的相同的盒子,但是不同说明等等,对于所有内置整数的转换。这个代码将会非常大
这个将是非常慢的。所以说,编译器在进行拆箱的时候,只能取消选中确切的类型。...
要解决这个问题:采用Convert.ToInt64既可以解决。 这个convert.to方法为我们提供了快速精确或
缓慢松懈的选择。
关于这个问题解决办法也有了,但是问题的本质还是没有理解到位,请大牛们指点。