Ric*_*d R 3 .net c# casting .net-2.0
我正在浏览一些代码并遇到了我的组合框尚未初始化的情况.这是在.NET 2.0中,在下面的代码中,this.cbRegion.SelectedValue为null.
int id = (int)this.cbRegion.SelectedValue;
Run Code Online (Sandbox Code Playgroud)
此代码抛出了空引用异常,而不是无效的强制转换异常.我想知道是否有人知道为什么它会抛出空引用异常而不是无效的强制转换?
如果你编译
object o = null;
int a = (int)o;
Run Code Online (Sandbox Code Playgroud)
看看MSIL代码,你会看到类似的东西
ldnull
...
unbox.any int32
Run Code Online (Sandbox Code Playgroud)
现在,unbox.any的行为指定如下:
如果obj不是盒装类型,则抛出InvalidCastException.
如果obj是空引用,则抛出NullReferenceException.
这是您在代码中看到的内容.