未将对象引用设置到对象的实例

System.NullReferenceException:未将目的引用设置到对象的实例,这是一个新鸟,中鸟,老鸟都避不开的谬误。

 

下面基础的解释一下这错误:

 

1:本质上的失实:

 

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

 

本来啦!结果就如下图了:

 

图片 1

 

如此这般赤裸裸的写出这种代码,不太容易,日常更倾向于下面一种:

 

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:再举一下通用性的调用错误,绑定,伊娃l(“字段”)
,那一个点子相比较广泛,某些情状要转字符串相比较,这里示例一下:

 

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

 

当伊娃(Eva)l(“字段”)为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引用的由来恐怕是:

 

其一:代码写多了,基本上都靠潜意识反应,就是说潜能发挥了,再白点就是习惯性思维。

故而基本上都不会怎么犯这错误,可是光靠潜意识,基本都能挡住,基本之外的,还得靠正常思维。

老鸟平常生气不太好,偶尔会走神,一走神,就漏了一个,再一走神,又漏了一个,再一走神,被神招唤了,太平间多了一位客人。

故此我写代码,尽量不走神,免的被招唤,但有时也会漏。

其二:是假老鸟,老鸟是装的,其实依然中鸟,硬要装,可是会装,表明智商高。

社会的法则注解,生存的越好的,装的档次越高,越会装,生活就越好,装到最高境界,那就是装外孙子。

外孙子是一名历史人物:会三十六计,装外甥的证实智商真的很高,没里相对没有鄙视之意,因为三十六计有时候我也在学,只是智商一贯上不去,所以境界一贯上不去。

 

下边再补偿一下,个人对中老鸟的见地,以下意见仅为笔者扮演的村办的估摸观点,和作者自己无关:

 

中鸟何以追求性能?

 

臆测:因为他俩平日只触及到系统的一有的,贫乏任何系统系统的摸底,所以他们愿目的在于她们担当的这多少个区域里,写出性能最佳的代码,这能说有错吗?

毋庸置疑,而且理论上就活该这么干!但是,稳定不足,虽然能写出又安静又高性能的代码,有多可以吗!

 

 

重点依然讲老鸟:老鸟何以不太关心性能,而求安静?

 

实质上,老鸟并不是不关心性能,而是她关怀的是:

 

一:稳定,这些很关键:

 

因为系统一上线:

先是:得对业主负责啊,你就是不是?

然后:假使这多少个产品是要给客户演示的,这得对客户负责啊,你就是不是?

再者:尽管那些产品要上线运营,这得对访客负责啊,你就是不是?

于是,不管您系统怎么着,首先,保证安居,至少给经理或客户或访客演示或操作的时候,你不可能出错,至于慢点不慢点,这么些好协商,好协商。

 

 

二:全部性能大于局部性能

 

I:这多少个就很显明了,你一个算法写的很好,可是另外选手数据库写的差,一做客,很慢,这怎么说的过去。

II:所以要保证总体访问性能差不多先,然后再展开一些优化,这多符合中国人眼前的优化思维啊。

III:再说了,每个人部分性能都最大化了,一做客,依然慢,找不到着优化的地点,那但是要出事的:总裁得流血买硬件了。

IV:还有,全部上加了缓存+静态化html后,你会发现,局域的最大优化代码,基本都派不上用场了,因为一贯就是造访+重返,

关于你这最大化性能的逻辑代码,这是千年走一次了。

 

本来了,个人对此观点是很负责的,相对没有其他轻视局部性能最大化的情致,相反还得鼓励我们局部性能最大化,努力写出最优代码:

 

一来:那是各样码农往上走必经的级差,跳过不是件好事。

二来:多让业主出下血,可以抵消下员工不满的激情:你让自家加班加点,我就让你出血,多好吧。

 

重大表明:

本篇著作绝大多数见识为笔者扮演的私有的估计观点,和自家无关,本人觉得,以上观点有点片面,可能与客观事实不符。

请各位看客看在周末的份上,少一份偏激,多一份感动,开X吧! 

 

本视频到此截止,欢迎收看,下次再会,谢谢!

 

PS:如今顺路折腾了下 CYQ.Data
V4.5离线协助文档,很快发表,敬请关注。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注