• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

    未將對象引用設(shè)置到對象的實(shí)例 (System.NullReferenceException)

    來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:42:28
    文檔

    未將對象引用設(shè)置到對象的實(shí)例 (System.NullReferenceException)

    未將對象引用設(shè)置到對象的實(shí)例 (System.NullReferenceException):下面基礎(chǔ)的解釋一下這錯誤: 1:本質(zhì)上的錯誤: 代碼如下:object a;//a是Null對象 protected void Page_Load(object sender, EventArgs e) { a.ToString();//調(diào)用一個Null對象的方法 } 當(dāng)然啦!結(jié)果就如下圖了: 這么赤裸裸的寫出這種代碼,不太
    推薦度:
    導(dǎo)讀未將對象引用設(shè)置到對象的實(shí)例 (System.NullReferenceException):下面基礎(chǔ)的解釋一下這錯誤: 1:本質(zhì)上的錯誤: 代碼如下:object a;//a是Null對象 protected void Page_Load(object sender, EventArgs e) { a.ToString();//調(diào)用一個Null對象的方法 } 當(dāng)然啦!結(jié)果就如下圖了: 這么赤裸裸的寫出這種代碼,不太

    下面基礎(chǔ)的解釋一下這錯誤:
    1:本質(zhì)上的錯誤:
    代碼如下:

    object a;//a是Null對象
    protected void Page_Load(object sender, EventArgs e)
    {
    a.ToString();//調(diào)用一個Null對象的方法
    }

    當(dāng)然啦!結(jié)果就如下圖了:

    這么赤裸裸的寫出這種代碼,不太容易,通常更傾向于下面一種:

    2:通常性的錯誤:

    示例1:一個過濾某些字符的函數(shù):
    代碼如下:


    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(' ');
    }

    這個函數(shù)比如容易看的出:如果value傳進(jìn)來為Null的時候,就等于Null.Replace被調(diào)用,就出現(xiàn)了上面的錯誤。
    因此,通常的,在函數(shù)的首行,都會對value進(jìn)行:if(!string.IsNullOrEmpty(value)) 一下。

    示例2:再舉一下通用性的調(diào)用錯誤,綁定,Eval("字段") ,這個方法比較常見,某些情況要轉(zhuǎn)字符串比較,這里示例一下:

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

    當(dāng)Eval("字段")為Null時,一個Null.ToString(),必然也會出現(xiàn)上面的錯誤,那什么情況出現(xiàn)?
    1:字段的值為Null
    2:空數(shù)據(jù)行,就是你表一行數(shù)據(jù)都沒有,全是Null。

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

    好了,看到本文的不管懂的還是不懂的,現(xiàn)在都應(yīng)該懂了,如果你非要說你不懂,我得贊揚(yáng)你智商高,下面有智商介紹,別放過。

    見到這異常:就是一個Null的對象調(diào)用了方法(屬性或其它成員)變成Null.XXX引發(fā)的。

    當(dāng)然啦,出現(xiàn)這種異常的場景,那可是萬萬千,數(shù)也數(shù)不完,但本質(zhì)是一樣的。

    個人觀點(diǎn)認(rèn)為,在三只鳥中發(fā)生此錯誤的原因各不同,基本如下:
    代碼如下:


    新鳥:不知道這個錯誤,或見這錯誤的次數(shù)太少,所以代碼基本防都不防,模仿式,大量的函數(shù)都潛伏這種錯誤殺手。

    個人猜測:新鳥寫的代碼,都不加判斷的原因可能:
    其一:是他們不知這種情況,剛學(xué)習(xí),經(jīng)驗(yàn)不足,未有處理這種異常的經(jīng)驗(yàn)。
    其二:推測是他們高調(diào)的認(rèn)為:多一個Null的判斷,會使得性能下降,他們追求高性能,因此,基本上,不加。


    中鳥:知道這個錯誤,只是考慮的不多,心不夠細(xì),人不夠穩(wěn),寫代碼基本會加,但普遍不加。

    中鳥比新鳥吃的蟲,肯定多,所以出現(xiàn)這種情況,原因當(dāng)然不一樣了啦。
    個人猜測:中鳥寫的代碼,出現(xiàn)Null引用的原因可能是:
    代碼如下:


    其一:沒有養(yǎng)成思維習(xí)慣,在加班的壓力下,寫個函數(shù)都是刷刷的就出來了,偶爾會加,普遍不加,加還是不加,等錯誤出來了再加。

    其二:中鳥這時期處于高性能研發(fā)性時期,最喜歡的和別人討論性能問題,特別是當(dāng)for的次數(shù)達(dá)到百萬級別時,當(dāng)性能從0.03秒下降到0.01秒時,會為整整提高3倍的性能而歡乎,并認(rèn)為這是一個重量級的發(fā)現(xiàn),然后推薦推薦給后來者,并BS一些不這么寫的新手或同級的鳥。
    同理:一個函數(shù)加一個null判斷,得上升到百萬次的調(diào)用級別的高度考慮,如果這判斷被調(diào)用百萬次,那性能不是大大的損失?
    如果加2個判斷,那就是2*百萬次的調(diào)用,那就是相當(dāng)大的性能損失,這怎么可以接受的呢?
    所以,能不加就不加,加不加,等錯誤出來了再加。
    其三:太懶了,這個本人是這么理解的說:
    大伙都知道,中鳥寫代碼,基本都屬于面向?qū)ο笮偷牧耍蔷褪翘焯旌蛯ο蟾阍谝粔K的了,每個對象都要搞來搞去,再多的精也傷不起!
    好吧,一個函數(shù)傳一個參數(shù),給你加一個判斷,代碼也不多,不算大括號就兩行。
    可是中鳥基本上寫的函數(shù)的參數(shù),偏偏三四五六七八九十個,這下讓人糾結(jié)了:
    加吧,一想,工作量太大了,而且這性能感覺不高;
    不加吧,好像也沒什么問題,這么一想啊,眼前闊然開朗,好,加不加,錯誤出來了再加。
    還有的,不僅是參數(shù)的判斷要折騰,函數(shù)內(nèi)部產(chǎn)生的對象,也要搞一搞,太多對象要考慮。
    光靠精力與考慮,加點(diǎn)人之常情,所以大多數(shù)情況是發(fā)生在:加不加,錯誤出來了再加!


    老鳥:對這錯誤太熟悉,心也夠細(xì),寫代碼潛意識會主動加防,但百密一疏,該來的還是會來,躲過初一,躲不過十五。

    老鳥吃的蟲就更多了,而且老鳥們身經(jīng)百戰(zhàn)之后,覺得系統(tǒng)穩(wěn)定,才是幸福。
    個人猜測:老鳥寫的代碼,出現(xiàn)Null引用的原因可能是:
    代碼如下:


    其一:代碼寫多了,基本上都靠潛意識反應(yīng),就是說潛能發(fā)揮了,再白點(diǎn)就是習(xí)慣性思維。
    所以基本上都不會怎么犯這錯誤,但是光靠潛意識,基本都能擋住,基本之外的,還得靠正常思維。
    老鳥通常精力不太好,偶爾會走神,一走神,就漏了一個,再一走神,又漏了一個,再一走神,被神招喚了,太平間多了一位客人。
    所以我寫代碼,盡量不走神,免的被招喚,但偶爾也會漏。
    其二:是假老鳥,老鳥是裝的,其實(shí)還是中鳥,硬要裝,不過會裝,說明智商高。
    社會的法則表明,生存的越好的,裝的程度越高,越會裝,生活就越好,裝到最高境界,那就是裝孫子。
    孫子是一名歷史人物:會三十六計(jì),裝孫子的說明智商真的很高,沒里絕對沒有鄙視之意,因?yàn)槿?jì)有時候我也在學(xué),只是智商一直上不去,所以境界一直上不去。

    下面再補(bǔ)充一下,個人對中老鳥的看法,以下觀點(diǎn)僅為作者扮演的個人的臆測觀點(diǎn),和作者本人無關(guān):

    中鳥何以追求性能?
    代碼如下:


    臆測:因?yàn)樗麄兺ǔV唤佑|到系統(tǒng)的一部分,缺少整個系統(tǒng)體系的了解,所以他們希望在他們負(fù)責(zé)的那一個區(qū)域里,寫出性能至上的代碼,這能說有錯嗎?
    沒錯,而且理論上就應(yīng)該這么干!但是,穩(wěn)定不足,如果能寫出又穩(wěn)定又高性能的代碼,有多好呢!

    重點(diǎn)還是講老鳥:老鳥何以不太關(guān)注性能,而求穩(wěn)定?

    其實(shí),老鳥并不是不關(guān)注性能,而是他關(guān)注的是:

    一:穩(wěn)定,這個很重要:
    代碼如下:


    因?yàn)橄到y(tǒng)一上線:
    首先:得對老板負(fù)責(zé)啊,你說是不是?
    然后:如果這個產(chǎn)品是要給客戶演示的,那得對客戶負(fù)責(zé)啊,你說是不是?
    再者:如果這個產(chǎn)品要上線運(yùn)營,那得對訪客負(fù)責(zé)啊,你說是不是?
    所以,不管你系統(tǒng)怎么樣,首先,保證穩(wěn)定,至少給老板或客戶或訪客演示或操作的時候,你不能出錯,至于慢點(diǎn)不慢點(diǎn),那個好商量,好商量。

    二:整體性能大于局部性能
    代碼如下:


    I:這個就很明顯了,你一個算法寫的很好,可是其它選手?jǐn)?shù)據(jù)庫寫的差,一訪問,很慢,這怎么說的過去。
    II:所以要保證整體訪問性能差不多先,然后再進(jìn)行局部優(yōu)化,這多符合中國人當(dāng)前的優(yōu)化思維啊。
    III:再說了,每個人局部性能都最大化了,一訪問,還是慢,找不到著優(yōu)化的地方,這可是要出事的:老板得出血買硬件了。
    IV:還有,整體上加了緩存+靜態(tài)化html后,你會發(fā)現(xiàn),局域的最大優(yōu)化代碼,基本都派不上用場了,因?yàn)橹苯泳褪窃L問+返回,
    至于您那最大化性能的邏輯代碼,那是千年走一回了。

    當(dāng)然了,個人對此觀點(diǎn)是很負(fù)責(zé)的,絕對沒有任何輕視局部性能最大化的意思,相反還得鼓勵大伙局部性能最大化,努力寫出最優(yōu)代碼:
    代碼如下:


    一來:這是每個碼農(nóng)往上走必經(jīng)的階段,跳過不是件好事。
    二來:多讓老板出下血,可以平衡下員工不滿的心情:你讓我加班,我就讓你出血,多好呢。

    重大說明:
    本篇文章絕大多數(shù)觀點(diǎn)為作者扮演的個人的臆測觀點(diǎn),和本人無關(guān),本人認(rèn)為,以上觀點(diǎn)有些片面,可能與客觀事實(shí)不符。
    請各位看客看在周末的份上,少一份偏激,多一份激動,開X吧!

    本視頻到此為止,歡迎收看,下次再會,謝謝!

    PS:最近順路折騰了下 CYQ.Data V4.5離線幫助文檔,很快發(fā)布,敬請關(guān)注。

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    未將對象引用設(shè)置到對象的實(shí)例 (System.NullReferenceException)

    未將對象引用設(shè)置到對象的實(shí)例 (System.NullReferenceException):下面基礎(chǔ)的解釋一下這錯誤: 1:本質(zhì)上的錯誤: 代碼如下:object a;//a是Null對象 protected void Page_Load(object sender, EventArgs e) { a.ToString();//調(diào)用一個Null對象的方法 } 當(dāng)然啦!結(jié)果就如下圖了: 這么赤裸裸的寫出這種代碼,不太
    推薦度:
    標(biāo)簽: 對象 null syste
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品欧美亚洲韩国日本| 91精品啪在线观看国产电影| 99久久这里只有精品| 国产美女精品视频| 国产成人精品日本亚洲11| 无码精品黑人一区二区三区| 久久99精品免费一区二区| 亚洲国产精品免费视频| 国语精品一区二区三区| 正在播放酒店精品少妇约 | 亚洲精品动漫免费二区| 国产精品.XX视频.XXTV| 久久99精品国产| 国产AV国片精品有毛| 亚洲AV无码久久精品成人 | 国产精品女人呻吟在线观看| 九九在线精品视频专区| 91在线视频精品| AAA级久久久精品无码片| 国产综合精品一区二区三区| 欧美精品v国产精品v日韩精品| 午夜成人精品福利网站在线观看 | 久久久久人妻一区精品性色av| 一级A毛片免费观看久久精品| 久久免费99精品国产自在现线| 国产欧美精品区一区二区三区| 午夜精品视频在线观看| 欧美国产日韩精品| 91不卡在线精品国产| 51精品资源视频在线播放| 91麻豆精品一二三区在线| 国产成人1024精品免费| 国产精品美女免费视频观看| 国产手机在线精品| 日韩亚洲精品福利| 一色屋精品视频在线观看| 亚洲AV永久纯肉无码精品动漫| 日韩精品久久无码中文字幕| 精品黑人一区二区三区| 91久久精品91久久性色| 久久99国产精品一区二区|