当前位置:  开发笔记 > 编程语言 > 正文

为什么在.net 2.0中向原语(即:int)转换null会抛出空引用异常而不是无效的转换异常?

如何解决《为什么在.net2.0中向原语(即:int)转换null会抛出空引用异常而不是无效的转换异常?》经验,为你挑选了2个好方法。

我正在浏览一些代码并遇到了我的组合框尚未初始化的情况.这是在.NET 2.0中,在下面的代码中,this.cbRegion.SelectedValue为null.

int id = (int)this.cbRegion.SelectedValue;

此代码抛出了空引用异常,而不是无效的强制转换异常.我想知道是否有人知道为什么它会抛出空引用异常而不是无效的强制转换?



1> Brian Genisi..:

它与拳击和拆箱有关.它试图从框中取出一个int(unbox),但该对象为null,因此在获得转换更改之前,您将获得一个空引用异常.



2> liggett78..:

如果你编译

object o = null;
int a = (int)o;

看看MSIL代码,你会看到类似的东西

ldnull
...
unbox.any int32

现在,unbox.any的行为指定如下:

如果obj不是盒装类型,则抛出InvalidCastException.

如果obj是空引用,则抛出NullReferenceException.

这是您在代码中看到的内容.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有