第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

主要方法代碼完全在try / catch內(nèi):這是不好的做法嗎?

主要方法代碼完全在try / catch內(nèi):這是不好的做法嗎?

C#
SMILET 2019-12-03 16:04:06
通常,我將所有Main方法的代碼都放在try / catch塊中,如下所示:public static void Main(string[] args){   try   {      // code   }   catch (Exception e)   {      // code   }}我這樣做是為了防止任何異常設(shè)法從程序邏輯的其余部分滑出,從而使我可以做一些事情,例如將其顯示在控制臺(tái)上,將其記錄到文件中,等等。但是,有人告訴我這是不好的做法。您認(rèn)為這是不好的做法嗎?
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

在沒有充分理由的情況下將任何代碼包裝在try/ catch塊中都是不好的做法。


在.NET編程模型中,應(yīng)為真正的例外情況或條件保留例外。您應(yīng)該僅嘗試捕獲實(shí)際上可以執(zhí)行某些操作的異常。此外,你應(yīng)該應(yīng)該很難永遠(yuǎn)抓住基礎(chǔ)System.Exception類(而是更愿意搭上更具體的,你得到的異常類可以辦理)。而且,如果在程序執(zhí)行過程中遇到真正意外的異常,您實(shí)際上應(yīng)該崩潰。


顯然,“正確”的答案必須根據(jù)具體情況而定,具體取決于塊中該// code占位符內(nèi)部的情況catch。但是,如果您要尋求一般規(guī)則或“最佳實(shí)踐”,則應(yīng)該始終有捕獲異常的特定原因,而不是理所當(dāng)然地不只是將所有代碼包裝在一個(gè)大的try/ catch塊中。


請(qǐng)注意,如果您只是試圖捕獲可能出于記錄或錯(cuò)誤報(bào)告目的而發(fā)生的任何未處理的異常,則應(yīng)使用AppDomain.UnhandledExceptionevent。這是一個(gè)僅通知事件,因此不允許您處理這些異常,但是在應(yīng)用程序崩潰后,它是實(shí)現(xiàn)日志記錄或錯(cuò)誤報(bào)告功能的正確位置。


編輯:當(dāng)我趕上閱讀雷蒙德·陳(Raymond Chen)出色的博客“舊事物”時(shí),我注意到他最近發(fā)表了一篇有關(guān)類似主題的文章。它特定于COM,而不是.NET Framework,但有關(guān)錯(cuò)誤處理的一般概念同樣適用于兩種環(huán)境。我以為我在這篇文章中可以分享一些寶石,以支持我的[顯然頗有爭(zhēng)議的]觀點(diǎn)。


從歷史上看,COM圍繞服務(wù)器的方法進(jìn)行了巨大的嘗試/例外。如果您的服務(wù)器遇到通常是未處理的異常,巨型try / except將捕獲該異常并將其變?yōu)閑rror RPC_E_SERVERFAULT。然后將異常標(biāo)記為已處理,從而使服務(wù)器保持運(yùn)行狀態(tài),從而“即使遇到問題也可以通過保持服務(wù)器運(yùn)行狀態(tài)來(lái)提高魯棒性”。


提醒您,這實(shí)際上是一種傷害。


發(fā)生未處理的異常的事實(shí)意味著服務(wù)器處于意外狀態(tài)。通過捕獲異常并說(shuō)“不用擔(dān)心,這一切都很好”,您最終使損壞的服務(wù)器處于運(yùn)行狀態(tài)。


[。。。]


捕獲所有異常并讓進(jìn)程繼續(xù)運(yùn)行,假定服務(wù)器可以從意外故障中恢復(fù)。但這是荒謬的。您已經(jīng)知道服務(wù)器是無(wú)法恢復(fù)的吐司:它崩潰了!


更好的方法是讓服務(wù)器崩潰,以便可以在故障點(diǎn)捕獲崩潰轉(zhuǎn)儲(chǔ)?,F(xiàn)在,您將有很大的機(jī)會(huì)了解正在發(fā)生的事情。


您可以[并且應(yīng)該]在他的博客上閱讀整篇文章:如何關(guān)閉COM“有幫助地”包裝在服務(wù)器周圍的異常處理程序。


查看完整回答
反對(duì) 回復(fù) 2019-12-03
?
狐的傳說(shuō)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊

如果您正在做最聰明的事情,可以使用此錯(cuò)誤,那是個(gè)好習(xí)慣。這就是try / catch的目的。

如果您只是丟掉錯(cuò)誤(或?qū)⑵溆涗洸G掉)-尤其是無(wú)論異常類型如何,都將其視為錯(cuò)誤的做法。

這可能會(huì)引發(fā)一個(gè)問題:如果最聰明的事情是將其記錄并丟棄該怎么辦?我想說(shuō)的是例外。但實(shí)際上,我的代碼會(huì)斷言。我想我沉迷于許多不良做法。


查看完整回答
反對(duì) 回復(fù) 2019-12-03
?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

我同意科迪所說(shuō)的90%。在某些情況下,類似于pluggin示例,您可能想捕獲系統(tǒng)異常。這是考慮使用WCF Web服務(wù)的另一個(gè)示例。


目標(biāo):即使遇到錯(cuò)誤,也要使用服務(wù)并進(jìn)行處理。讓錯(cuò)誤冒泡。


public static bool DoRemoteWebServiceWork()

{

    bool result;

    RemoteWebServiceClient client = new RemoteWebServiceClient();

    try

    {

        result = client.DoWork();

        client.Close();

    }

    catch (Exception)

    {

        client.Abort(); //dispose

        throw;//This service is critical to application function. The application should break if an exception is thrown.

        //could log end point and binding exceptions to avoid ignoring changes to the remote service that require updates to our code.

    }

    return result;

}

目標(biāo):即使遇到錯(cuò)誤,也要使用服務(wù)并進(jìn)行處理。防止錯(cuò)誤冒泡。


public static bool DoRemoteWebServiceWork()

{

    bool result;

    RemoteWebServiceClient client = new RemoteWebServiceClient();

    try

    {

        result = client.DoWork();

        client.Close();

    }

    catch (Exception)

    {

        client.Abort(); //dispose

        //throw; //This service is auxiliary to the applications primary function. We have no influence over the service and therefore cannot fix it.

        //could log end point and binding exceptions to avoid ignoring changes to the remote service that require updates to our code.

    }

    return result;

}


查看完整回答
反對(duì) 回復(fù) 2019-12-03
  • 3 回答
  • 0 關(guān)注
  • 734 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)