濮阳杆衣贸易有限公司

主頁 > 知識庫 > 總結(jié)十條.NET異常處理建議

總結(jié)十條.NET異常處理建議

熱門標(biāo)簽:上海市三維地圖標(biāo)注 辦公用地圖標(biāo)注網(wǎng)點(diǎn)怎么操作 聊城智能電銷機(jī)器人電話 南昌自動外呼系統(tǒng)線路 西寧電銷外呼系統(tǒng)公司 云南外呼系統(tǒng)代理 安陸市地圖標(biāo)注app 海東防封電銷卡 寧德防封版電銷卡

.NET中從始至終要緊記異常處理的策略:拋出具體的一個異常,而不是只拋出Exception類型的異常,這樣能方便我們捕獲對應(yīng)類型的異常。我們在編寫代碼時要注意考慮到應(yīng)用程序最差的情況;顯示有好的信息,并提供適當(dāng)?shù)墓芾韱T聯(lián)系信息。

1、不要拋出“new Exception()”

請別這樣做。Exception是一個非常抽象的異常類,捕獲這類異常通常會產(chǎn)生很多負(fù)面影響。通常情況下應(yīng)該定義我們自己的異常類,并且需要區(qū)分系統(tǒng)拋出的異常和我們自己拋出的異常。

2、不要將重要的異常信息存儲在Message屬性中

異常都封裝在類中。當(dāng)你需要返回異常信息時,請將信息存儲在一些單獨(dú)的屬性中(而不要放在Message屬性中),否則人們很難從Message屬性中解析出他們需要的信息。比如當(dāng)你僅僅需要糾正一下拼寫錯誤,如果你將錯誤信息和其它提示內(nèi)容一起以String的形式寫在了Message屬性中,那么別人該怎樣簡單地獲取他們要的錯誤信息呢?你很難想象到他們要做多少努力。

3、每個線程要包含一個try/catch塊

一般異常處理都放在了程序中一個比較集中的地方。每個線程都需要有一個try/catch塊,否則你會漏掉某些異常從而出現(xiàn)難以理解的問題。當(dāng)一個程序開啟了多個線程去處理后臺任務(wù)時,通常你會創(chuàng)建一個類型來存儲各個線程執(zhí)行的結(jié)果。這時候請不要忘記了為類型增加一個字段來存儲每個線程可能發(fā)生的異常,否則的話,主線程不會知道其他線程的異常情況。在一些“即發(fā)即忘”的場合,你可能需要將主線程中的異常處理邏輯復(fù)制一份到你的子線程中去。

4、捕獲異常后要記錄下來

不管你的程序是使用何種方式記錄日志——log4net、EIF、Event Log、TraceListeners或者文本文件等,這些都不重要。重要的是:當(dāng)你遇到異常后,應(yīng)該在某個地方將它記錄在日志中。但是請僅僅記錄一次,否則的話,你最后會得到一個非常大的日志文件,包含了許多重復(fù)信息。

5、不要只記錄Exception.Message的值,還需要記錄Exception.ToString()

當(dāng)我們談到記錄日志時,不要忘了我們應(yīng)該記錄Exception.ToString()的值,而不是Exception.Message。因?yàn)镋xception.ToString()包含了“堆棧跟蹤”信息,內(nèi)部異常信息以及Message。通常這些信息非常重要,而如果你只記錄Exception.Message的話,你只可能看到類似“對象引用未指向堆中實(shí)例”這樣的提示。

6、要捕獲具體的異常

如果你要捕獲異常,請盡可能的捕獲具體異常(而非Exception)。好的代碼只能捕獲它知道該怎么處理的異常 

7、不要忘記使用using

僅僅調(diào)用對象的Dispose()方法是不夠的。即使異常發(fā)生時,using關(guān)鍵字也能夠防止資源泄漏 

8、不要使用特殊返回值去表示方法中發(fā)生的異常

1)、直接拋出異常更快,因?yàn)槭褂锰厥獾姆祷刂当硎井惓r,我們每次調(diào)用完方法時,都需要去檢查返回結(jié)果,并且這至少要多占用一個寄存器。降低代碼運(yùn)行速度。
2)、特殊返回值能,并且很可能被忽略
3)、特殊返回值不能包含堆棧跟蹤信息,不能返回異常的詳細(xì)信息
4)、很多時候,不存在一個特殊值去表示方法中發(fā)生的異常,比如,除數(shù)為零的情況 

9、不要將“拋出異常”作為函數(shù)執(zhí)行結(jié)果的一種

這是一個非常糟糕的設(shè)計(jì)。代碼中包含太多的try/catch塊會使代碼難以理解,恰當(dāng)?shù)脑O(shè)計(jì)完全可以滿足一個方法返回各種不同的執(zhí)行結(jié)果,如果你確實(shí)需要通過拋出異常來表示方法的執(zhí)行結(jié)果,那只能說明你這個方法做了太多事情,必須進(jìn)行拆分 

10、可以使用“拋出異?!钡姆绞饺ブ卣f明不能被忽略的錯誤

例如我為我的一個產(chǎn)品開發(fā)了一個用來登錄的API(Login),如果用戶登錄失敗,或者用戶并沒有調(diào)用Login方法,那么他們調(diào)用其他方法時都會失敗。我在設(shè)計(jì)Login方法的時候這樣做的:如果用戶登錄失敗,它會拋出一個異常,而并不是簡單的返回false。正因?yàn)檫@樣,調(diào)用者(用戶)才不會忽略(他還沒登錄)這個事實(shí)。

ps: .Net異常處理的四要素

1.一個表示異常詳細(xì)信息的類。
2.一個像調(diào)用者引發(fā)異常類實(shí)例的成員。
3.調(diào)用者的一段調(diào)用異常成員的的模塊。
4.調(diào)用者的一段處理或捕獲將要發(fā)生異常的代碼塊。

您可能感興趣的文章:
  • 一些.NET對多線程異常處理技巧分享
  • .NET中的異常和異常處理用法分析
  • .NET(C#):Emit創(chuàng)建異常處理的方法
  • ASP.NET MVC異常處理模塊詳解
  • ASP.NET Core異常和錯誤處理(8)
  • ASP.NET mvc異常處理的方法示例介紹
  • ASP.NET MVC下基于異常處理的完整解決方案總結(jié)
  • 關(guān)于.NET異常處理的思考總結(jié)
  • ASP.NET MVC中異常處理&自定義錯誤頁詳析
  • .net中捕捉全局未處理異常的三種方式示例

標(biāo)簽:南寧 洛陽 青海 贛州 衢州 崇左 汕尾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《總結(jié)十條.NET異常處理建議》,本文關(guān)鍵詞  總結(jié),十條,.NET,異常,處理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《總結(jié)十條.NET異常處理建議》相關(guān)的同類信息!
  • 本頁收集關(guān)于總結(jié)十條.NET異常處理建議的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    中西区| 白水县| 宁都县| 平顺县| 辽中县| 汾西县| 雅安市| 枣强县| 小金县| 苏州市| 麻阳| 禹州市| 城市| 红河县| 靖宇县| 吐鲁番市| 华宁县| 兰坪| 东丰县| 东乌珠穆沁旗| 西昌市| 彩票| 清涧县| 志丹县| 平罗县| 蒙城县| 句容市| 乌拉特中旗| 东宁县| 土默特右旗| 甘洛县| 德惠市| 衡东县| 高阳县| 勐海县| 太仆寺旗| 黄冈市| 凤冈县| 日土县| 襄垣县| 康平县|