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

我怎么能在int上执行方法?没有NullReferenceException设置为null?

如何解决《我怎么能在int上执行方法?没有NullReferenceException设置为null?》经验,为你挑选了2个好方法。

我在MSDN上看过:

null关键字是表示空引用的文字,不引用任何对象.

但我看到以下代码运行时没有抛出任何异常:

int? i = null;
var s = i.ToString();

因此,如果变量i为null,为什么我可以执行它的方法?



1> Eugene Podsk..:

因为int?实际上是a Nullable并且Nullable是a struct,并且结构不能为null.

这是Nullable类型的工作方式.它们不是引用值,因此它们不能为null,但是当它们被认为等效于null时,它们可以具有状态.

你可以得到更多的细节Nullable落实在如何在.NET中的引擎盖下实现的可空类型?和Nullable 实现


虽然@JeppeStigNielsen指出有一个案例,你可以得到一个NRE:

但是:当装箱到引用类型时,Nullable <>的特殊处理确保我们获得真正的空引用.因此,例如i.GetType()与问题中的i将会爆发NullReferenceException.这是因为此方法是在对象上定义的而不是可覆盖的


但是:当装入引用类型时,对Nullable <>`的特殊处理确保我们得到一个真正的空引用.所以例如`i.GetType()`与`i`在问题___will___中与`NullReferenceException`一起爆炸.那是因为这个方法是在`object`上定义的而不是可覆盖的.

2> Janne Matika..:

您粘贴的代码

int? i = null;

实际上只是一个简写

int? i = new int?();

这是一个简写

Nullable i = new Nullable();

分配null是使用隐式运算符,您可以从此处MSDN中读取更多内容.

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