系统。NullReferenceException:对象引用没有设置为对象的实例,这是新鸟、中鸟、老鸟都无法避免的错误。
以下是这个错误的基本解释:1。本质错误:复制代码如下:对象a;//a是空对象保护void page _ load(对象发送方,eventargs e){ a . tostring();//调用一个空对象的方法}当然!结果如下:
裸写这种代码不容易,它通常倾向于以下几种:
2.常见错误:
示例:过滤部分字符的函数:复制代码如下:public static string filter value(string value){ string[]filter char=new string[]{ ' \ ' ',',',',','=',';', ''', ' - ' };for(int I=0;我过滤字符。长度;i ) {值=值。Replace(filterChar[i],' ');}返回值。修剪(“”);}比如这个函数,很容易看出来:如果传入的值是Null,就说明那个Null。调用Replace,出现上述错误。所以,通常,在函数的第一行,值会是:if(!字符串。IsNullOrEmpty(value))。
2.例:再举一个一般的调用error,binding,Eval ('field ')。这种方法很常见,在某些情况下需要进行字符串比较。这里有一个例子:
%# Eval ('field ')。ToString()=='1 '?是':'否' %
当Eval ('field ')为Null时,为Null。ToString(),上面的错误必然会出现,那么会发生什么呢?1:该字段的值为空。2:空数据行,即你的表中没有数据,全部为空。复制代码
所以预防性的写法是:%# Convert。ToString(Eval ('field'))=='1 '?是':'否' %
好了,所有看这篇文章的人,不管你知不知道,现在应该都明白了。如果你坚持说你不懂,我不得不夸你智商高。下面介绍一下智商,不要放过。
看到这个异常:它是由一个空对象调用一个方法(属性或其他成员)变成空引起的。XXX
当然,变态的场景有千千万万,但本质是一样的。
个人认为,三只鸟出现这个错误的原因各不相同,基本如下:复制代码如下:Newbird:不知道这个错误,或者看到这个错误的次数太少,代码基本上无法阻止。模仿,大量的函数都潜伏着这种错误杀手。
个人猜测:Newbird写的代码不判。原因可能是:第一,他们不了解这种情况,刚学,经验不足,没有处理这种异常的经验。第二,猜测是他们高调思考:多一个空判断会让业绩下滑,他们追求高业绩,所以基本上不加。
中国鸟:我知道这个错误,但是我没多想。我不够细心,也不够稳重。我基本会加代码,一般不会。
中国的鸟肯定比新鸟吃的昆虫多,所以这其中的原因当然不一样。个人猜测:中国鸟写的代码出现空引用的原因可能是:复制代码如下:第一,没有养成思考的习惯。在加班的压力下,写个功能刷刷就出来了。偶尔会添加,但一般不会。加不加,等错误出来再加。
第二,中国鸟正处于高性能的R&D时期。它喜欢和别人讨论性能问题,尤其是当for的次数达到百万,性能从0.03秒下降到0.01秒的时候,它会很乐意把性能提高三倍。它认为这是一个重量级的发现,然后推荐给后来者,BS一些新手或者同级别的鸟不这么写。类似地:一个具有空判断的函数必须在一百万次调用的水平上被考虑。如果这个判断叫一百万次,业绩不是亏大了吗?如果加上2个判断,那就是2*百万次调用,这是相当大的性能损失。这怎么能让人接受呢?所以,不能加就不要加,等错误出来了再加。第三,我太懒。我是这样理解的:大家都知道中国的鸟写代码,基本属于面向对象的类型,就是天天和对象打交道。每个对象都要参与进来,再细也没坏处!好吧,一个函数传递一个参数,给你一个判断。代码不多,就两行没有花括号。但是中国鸟写的函数只有34567890个参数,让人纠结:加吧,想想,工作量太大,性能不高;不加了,好像没什么问题。这样想的话,眼睛睁得大大的,很开朗。好吧,加不加,等错误出来再加。更何况要折腾的不仅仅是参数的判断,还有函数内部生成的对象。要考虑的对象太多了。只是靠精力和考虑,加点人性,所以大部分情况都是这样发生的:加还是不加,错误出来了再加!
老鸟:这个错误我太熟悉了,我也够小心的。我写代码的时候潜意识会主动防范,但是百密一疏,该来的总会来。初一逃不掉,十五逃不掉。
老鸟多吃虫子,经过多次战斗,老鸟觉得系统稳定,这是他们的幸福。个人猜测:老鸟写的代码可能有空引用。原因是复制出来的代码是这样的:第一,如果写的代码太多,基本都是靠潜意识反应,也就是说把潜力发挥出来,然后白点就是习惯性思维。所以基本上他们是不会犯这个错误的,但是基本上可以单独被潜意识屏蔽。况且他们还得靠正常思维。老鸟通常不太精力充沛。偶尔会心不在焉。当他们心不在焉的时候,他们就会错过一个。当他们心不在焉的时候,他们就会错过另一个人。他们心不在焉的时候,被上帝召唤,太平间多了一个客人。所以我写代码,尽量不分心,避免被调用,但偶尔还是会漏。二是假老鸟。老鸟装的,其实是中等鸟。很难装,但是能装,说明智商很高。社会规律表明,活得越好,装的水平越高,装得越好,日子也会过得越好,最高水平就是装孙子。孙子是历史人物:他懂得三十六计。装孙子说明他智商真的很高,绝对没有鄙视他的意思,因为有时候我在学三十六计,但是智商一直上不去,所以水平一直上不去。
下面再补充一下,个人对中老鸟的看法,以下观点仅为作者扮演的个人的臆测观点,和作者本人无关:
中国的鸟为什么追求性能?复制代码代码如下:猜测:因为他们通常只接触系统的一部分,缺乏整个系统架构的知识,所以希望写出自己负责的领域内性能最高的代码。这能说是错的吗?可以,而且理论上应该可以做到!但是,稳定性还不够。如果能写出稳定高性能的代码该多好啊!
还是聚焦老鸟:老鸟为什么不太注重性能,而是求稳?
其实不是老鸟不注重性能,他注重的是:
一:稳定,这个很重要: 复制代码如下:因为系统一上线:首先你要对老板负责,你说是不是?然后:这个产品要展示给客户看,就得对客户负责,你说呢?再者:这个产品要上线,就得对访客负责,你说呢?所以,不管你的系统怎么样,首先要保证它是稳定的。至少,演示或操作时不能出错
二:整体性能大于局部性能复制码代码如下:I:这个很明显。你写一个算法很好,但是其他玩家的数据库写的很差。一旦接入,速度非常慢。这怎么能说得过去呢?II:所以要先保证整体访问性能差不多,再进行局部优化。这符合目前国人的优化思维。III:除此之外,每个人的局部表现都是最大化的。访问过一次,还是很慢,没有优化的地方。这是要发生的:老板得流血买硬件。IV:还有,整体添加缓存静态html后,你会发现局部最大优化代码基本没用,因为直接访问就是返回。至于你最大化性能的逻辑代码,那是一千年前的事了。
当然,我个人对这个观点负责,绝对没有轻视地方业绩最大化的意思。相反,我还得鼓励大家最大限度地发挥局部性能,努力写出最好的代码:复制代码如下:第一,这是每个码农往上走的必经阶段,跳过不是好事。第二,让老板多流血,可以平衡员工的不满:你让我加班,我就让你流血。多好啊!
重大说明:本文绝大多数观点为作者个人臆测观点,与本人无关。我认为以上观点有些片面,可能与客观事实不符。各位,为了周末,请少点极端,多点刺激来开X!
本视频到此结束,欢迎观看,下次见,谢谢!
PS:最近折腾了CYQ的离线帮助文档。数据V4.5在路上,很快就会发布,敬请期待。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。