巧用Using跳過異常捕獲

2021-09-22 06:51:24 字數 1431 閱讀 5428

前言

這裡主要說乙個使用using躲過異常的小技巧。

我原來就遇到過類似的問題好幾次了,也沒想到辦法,直接有一天,除錯得實在受不了了,才認真想了以下的解決方案。

問題

原來的**是這樣的:

public abstract class 

command : routeduicommand

catch

finally

}protected abstract void onexecute(commandcontext commandcontext);

}

這是乙個抽象的命令類,這裡只貼出了這個問題的主要的邏輯:需要在onexecute方法執行之前設定_i***ecuting的值為true,然後執行onexecute方法,然後不管是否出現異常,都在執行完畢後,設定為false。子類實現這個類實現onexecute方法來編寫自己真正的執行**。這時比較麻煩的乙個問題是:在**編寫階段,當子類的onexecute方法內部出現異常時,visual studio都會直接把錯誤給定在這個類上,如下:

子類:

private class 

concretecommand : command

}

出現異常:

除錯的過程中,無法直接定位到子類,當**很多時,找實現這個基類的子類是很煩人的事。而且找到了它以後,打上斷點,還得重新執行一遍來執行同樣的bug路徑。時間就是這樣浪費的,除錯得很崩潰……

解決

需要重構了基類的**,但是由於execute方法的設定_i***ecuting欄位的邏輯不能改變,所以並不簡單。靈光一閃,有了以下的實現:

public abstract class 

command

}protected abstract void onexecute(commandcontext commandcontext);

private bool _i***ecuting

set}

private

/// ///

原來的模式增加了除錯的困難度。

///

新增這個方法方便除錯。

///

private class

set}

#region idisposable members

public void dispose()

#endregion}}

成功解決:

後話

mysql異常捕獲 MySql中捕獲異常的方法

下面是程式設計之家 jb51.cc 通過網路收集整理的 片段。mysql中是否能有sqlserver的 error變數呢,或者如c 中的try catch語法呢。答案是肯定的,例項 如下 code drop procedure if exists sp call jobs create proced...

關於異常捕獲

你可以查一下你的sdk,裡面有很多的exception的定義,其基類其實都是system.exception一樣。但system.exception只提供了一些一般異常的處理。更多的需要專業的來處理。比如找不到檔案,你必須捕捉system.io.filenotfoundexception這個異常。在...

python異常捕獲

python的異常處理如c c 的結構一樣。python用try.except.c c 則用try.catch.並不難理解。在對具體錯誤的獲取則有點不同,主要是語法的差異上。c 在catch後可生成相應乙個異常的類,然後可通過類物件獲取相關的錯誤資訊。而python則不同,它在獲取錯誤資訊有點奇怪,...