最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年11月04日 14:45:03   投稿:mrr  
.NET中從始至終要緊記異常處理的策略:拋出具體的一個(gè)異常,而不是只拋出Exception類(lèi)型的異常,這樣能方便我們捕獲對(duì)應(yīng)類(lèi)型的異常。我們?cè)诰帉?xiě)代碼時(shí)要注意考慮到應(yīng)用程序最差的情況;顯示有好的信息,并提供適當(dāng)?shù)墓芾韱T聯(lián)系信息

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

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

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

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

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

3、每個(gè)線程要包含一個(gè)try/catch塊

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

4、捕獲異常后要記錄下來(lái)

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

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

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

6、要捕獲具體的異常

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

7、不要忘記使用using

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

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

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

9、不要將“拋出異?!弊鳛楹瘮?shù)執(zhí)行結(jié)果的一種

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

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

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

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

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

相關(guān)文章

  • 基于asp.net下使用jquery實(shí)現(xiàn)ajax的解決方法

    基于asp.net下使用jquery實(shí)現(xiàn)ajax的解決方法

    本文以最簡(jiǎn)單的方法為新手示范如何使用jquery實(shí)現(xiàn)ajax技術(shù)(所以本文是專(zhuān)為新手所寫(xiě),老鳥(niǎo)勿噴,大神此處省略一萬(wàn)字)。至于什么是jquery什么是ajax,自己谷歌去
    2013-05-05
  • asp.net core3.1 引用的元包dll版本兼容性問(wèn)題解決方案

    asp.net core3.1 引用的元包dll版本兼容性問(wèn)題解決方案

    這篇文章主要介紹了asp.net core 3.1 引用的元包dll版本兼容性問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 深入淺析.NET應(yīng)用程序SQL注入

    深入淺析.NET應(yīng)用程序SQL注入

    這篇文章主要介紹了.NET應(yīng)用程序SQL注入的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • 利用Aspose.Cells實(shí)現(xiàn)萬(wàn)能導(dǎo)出功能

    利用Aspose.Cells實(shí)現(xiàn)萬(wàn)能導(dǎo)出功能

    這篇文章主要為大家詳細(xì)介紹了利用Aspose.Cells實(shí)現(xiàn)萬(wàn)能導(dǎo)出功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 關(guān)于利用RabbitMQ實(shí)現(xiàn)延遲任務(wù)的方法詳解

    關(guān)于利用RabbitMQ實(shí)現(xiàn)延遲任務(wù)的方法詳解

    最近在使用RabbitMQ來(lái)實(shí)現(xiàn)延遲任務(wù)的時(shí)候發(fā)現(xiàn),這其中的知識(shí)點(diǎn)還是挺多的,所以下面這篇文章主要給大家介紹了關(guān)于利用RabbitMQ實(shí)現(xiàn)延遲任務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • ASP.net 路徑問(wèn)題 詳解

    ASP.net 路徑問(wèn)題 詳解

    各位有沒(méi)有碰到在日常工作中經(jīng)常在路徑設(shè)置的時(shí)候把 "~/ 、./ 、../ 、 / 、"這些符號(hào)搞混搞亂了?
    2010-05-05
  • ASP.NET自定義Web服務(wù)器控件之Button控件

    ASP.NET自定義Web服務(wù)器控件之Button控件

    這篇文章主要介紹了ASP.NET自定義Web服務(wù)器控件之Button控件,詳細(xì)講述了Button控件的實(shí)現(xiàn)代碼、前臺(tái)頁(yè)面的調(diào)用以及對(duì)應(yīng)的事件響應(yīng)代碼,具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • win7-vs2012下安裝.net frame work 的過(guò)程圖文詳解

    win7-vs2012下安裝.net frame work 的過(guò)程圖文詳解

    這篇文章主要介紹了win7-vs2012下安裝.net frame work 的過(guò)程圖文詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • asp.net全局變量的實(shí)例方法

    asp.net全局變量的實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于asp.net全局變量的實(shí)例方法和實(shí)例,需要的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • ASP.NET Web API教程 創(chuàng)建Admin控制器實(shí)例分享

    ASP.NET Web API教程 創(chuàng)建Admin控制器實(shí)例分享

    在本文中我們要添加一個(gè)對(duì)產(chǎn)品支持CRUD(創(chuàng)建、讀取、更新和刪除)操作的Web API控制器,需要的朋友可以參考下
    2012-11-11

最新評(píng)論

图们市| 和田县| 安达市| 平定县| 万载县| 改则县| 东乡县| 丹江口市| 广西| 漾濞| 楚雄市| 苗栗县| 哈密市| 平利县| 抚远县| 睢宁县| 东山县| 汤原县| 磴口县| 兴隆县| 朝阳市| 乌鲁木齐市| 安远县| 如东县| 西贡区| 宣城市| 扎鲁特旗| 工布江达县| 隆昌县| 清河县| 扶绥县| 专栏| 恩施市| 轮台县| 克山县| 通海县| 固镇县| 大英县| 曲水县| 石家庄市| 景德镇市|