当前位置: 首页 > 编程语言 > C#

为什么在.net2.0中将null转换为primitive(即:int)会抛出空引用异常而不是无效强制转换异常?

时间:2023-04-10 23:44:51 C#

为什么在.net2.0中将null转换为原始类型(即:int)会抛出空引用异常而不是无效转换异常?我正在浏览一些代码并遇到了我的组合框尚未初始化的情况。这是在.NET2.0中,在下面的代码中,this.cbRegion.SelectedValue为null。intid=(int)this.cbRegion.SelectedValue;此代码抛出空引用异常,而不是无效转换异常。我想知道是否有人知道为什么它抛出空引用异常而不是无效转换?它与装箱和拆箱有关。它试图对一个int进行拆箱(unbox),但是那个对象是空的,所以在你得到转换之前你会得到一个空引用异常。如果编译objecto=null;inta=(int)o;并查看MSIL代码,您会看到类似于ldnull...unbox.anyint32现在,unbox.any的行为指定如下:如果obj不是框转换类型,则抛出InvalidCastException。如果obj是空引用,则抛出NullReferenceException。这就是您在代码中看到的。它会尝试在投射之前读取对象。所以你会得到一个nullexception而不是强制转换异常。“选定值”的异常为空。它甚至没有进入演员阵容。以上为C#学习教程:为什么.net2.0中将null转换为primitive(即:int)会抛出空引用异常,而不是invalidcast异常?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: