我正在浏览一些代码并遇到了我的组合框尚未初始化的情况.这是在.NET 2.0中,在下面的代码中,this.cbRegion.SelectedValue为null.
int id = (int)this.cbRegion.SelectedValue;
此代码抛出了空引用异常,而不是无效的强制转换异常.我想知道是否有人知道为什么它会抛出空引用异常而不是无效的强制转换?
它与拳击和拆箱有关.它试图从框中取出一个int(unbox),但该对象为null,因此在获得转换更改之前,您将获得一个空引用异常.
如果你编译
object o = null; int a = (int)o;
看看MSIL代码,你会看到类似的东西
ldnull ... unbox.any int32
现在,unbox.any的行为指定如下:
如果obj不是盒装类型,则抛出InvalidCastException.
如果obj是空引用,则抛出NullReferenceException.
这是您在代码中看到的内容.