未将对象引用设置到对象的实例 (System.NullRefere

下面基础的解释一下这错误:
1:本质上的错误:

复制代码 代码如下:


object a;//a是Null对象
protected void Page_Load(object sender, EventArgs e)
{
a.ToString();//调用一个Null对象的方法
}


当然啦!结果就如下图了:

未将对象引用设置到对象的实例 (System.NullRefere

这么赤裸裸的写出这种代码,不太容易,通常更倾向于下面一种:

2:通常性的错误:

示例1:一个过滤某些字符的函数:

复制代码 代码如下:


public static string FilterValue(string value)
{
string[] filterChar = new string[] { "\'", ",", ">", "<", "=", ";", "\"", "--" };
for (int i = 0; i < filterChar.Length; i++)
{
value = value.Replace(filterChar[i], "");
}
return value.Trim(' ');
}


这个函数比如容易看的出:如果value传进来为Null的时候,就等于Null.Replace被调用,就出现了上面的错误。
因此,通常的,在函数的首行,都会对value进行:if(!string.IsNullOrEmpty(value)) 一下。

示例2:再举一下通用性的调用错误,绑定,Eval("字段") ,这个方法比较常见,某些情况要转字符串比较,这里示例一下:

<%# Eval("字段").ToString()=="1"?"Yes":"No" %>

当Eval("字段")为Null时,一个Null.ToString(),必然也会出现上面的错误,那什么情况出现?
1:字段的值为Null
2:空数据行,就是你表一行数据都没有,全是Null。
复制代码

所以预防性的写法是:
<%# Convert.ToString(Eval("字段"))=="1"?"Yes":"No" %

好了,看到本文的不管懂的还是不懂的,现在都应该懂了,如果你非要说你不懂,我得赞扬你智商高,下面有智商介绍,别放过。

见到这异常:就是一个Null的对象调用了方法(属性或其它成员)变成Null.XXX引发的。

当然啦,出现这种异常的场景,那可是万万千,数也数不完,但本质是一样的。

个人观点认为,在三只鸟中发生此错误的原因各不同,基本如下:

复制代码 代码如下:


新鸟:不知道这个错误,或见这错误的次数太少,所以代码基本防都不防,模仿式,大量的函数都潜伏这种错误杀手。

个人猜测:新鸟写的代码,都不加判断的原因可能:
其一:是他们不知这种情况,刚学习,经验不足,未有处理这种异常的经验。
其二:推测是他们高调的认为:多一个Null的判断,会使得性能下降,他们追求高性能,因此,基本上,不加。




中鸟:知道这个错误,只是考虑的不多,心不够细,人不够稳,写代码基本会加,但普遍不加。

中鸟比新鸟吃的虫,肯定多,所以出现这种情况,原因当然不一样了啦。
个人猜测:中鸟写的代码,出现Null引用的原因可能是:

复制代码 代码如下:


其一:没有养成思维习惯,在加班的压力下,写个函数都是刷刷的就出来了,偶尔会加,普遍不加,加还是不加,等错误出来了再加。

其二:中鸟这时期处于高性能研发性时期,最喜欢的和别人讨论性能问题,特别是当for的次数达到百万级别时,当性能从0.03秒下降到0.01秒时,会为整整提高3倍的性能而欢乎,并认为这是一个重量级的发现,然后推荐推荐给后来者,并BS一些不这么写的新手或同级的鸟。
同理:一个函数加一个null判断,得上升到百万次的调用级别的高度考虑,如果这判断被调用百万次,那性能不是大大的损失?
如果加2个判断,那就是2*百万次的调用,那就是相当大的性能损失,这怎么可以接受的呢?
所以,能不加就不加,加不加,等错误出来了再加。
其三:太懒了,这个本人是这么理解的说:
大伙都知道,中鸟写代码,基本都属于面向对象型的了,那就是天天和对象搞在一块的了,每个对象都要搞来搞去,再多的精也伤不起!
好吧,一个函数传一个参数,给你加一个判断,代码也不多,不算大括号就两行。
可是中鸟基本上写的函数的参数,偏偏三四五六七八九十个,这下让人纠结了:
加吧,一想,工作量太大了,而且这性能感觉不高;
不加吧,好像也没什么问题,这么一想啊,眼前阔然开朗,好,加不加,错误出来了再加。
还有的,不仅是参数的判断要折腾,函数内部产生的对象,也要搞一搞,太多对象要考虑。
光靠精力与考虑,加点人之常情,所以大多数情况是发生在:加不加,错误出来了再加!




老鸟:对这错误太熟悉,心也够细,写代码潜意识会主动加防,但百密一疏,该来的还是会来,躲过初一,躲不过十五。

老鸟吃的虫就更多了,而且老鸟们身经百战之后,觉得系统稳定,才是幸福。
个人猜测:老鸟写的代码,出现Null引用的原因可能是:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4642844e91693644e5e31f7857e1031d.html