大家好,我想各地傳遞方法塊作爲參數傳遞給該建在異常處理的輔助類,但它的那些東西一個是直觀的,我想將其提交批評,見解或建議。高階函數法
我想指出了前面,這是不是我怎麼做我所有的異常處理,但也有在那裏我發現這種結構更多的情況下「可讀性」。
例如,我有一個場景,我正在顯示預覽圖像,但如果失敗(這是一個真實場景,我正在預覽圖像,某些GIF/BMP格式無法預覽),這只是一個場景,我顯示替代圖像而不是預覽。在try/catch代碼塊,看起來像這樣:
try
{
alternatePreviewImage.SetSource(fs);
}
catch (Exception ex) {
requiresSpecialPreview = false;
previewImage = new BitmapImage(new Uri("Images/NoPreviewAvailable.png", UriKind.Relative));
}
所以我會利用一個輔助類,需要一個方法參數,使它看起來像這樣:
if(!ErrorHelper.RunWithSuccessNotify(()=> alternatePreviewImage.SetSource(fs))){
requiresSpecialPreview = false;
previewImage = new BitmapImage(new Uri("Images/NoPreviewAvailable.png", UriKind.Relative));
}
的ErrorHelper.RunWithSuccessNotify是很簡單:
public static bool RunWithSuccessNotify(Action code) {
bool success = true;
try
{
code();
}
catch (Exception ex)
{
success = false;
}
return success;
}
讓我再次強調,這是對這些低撞擊場景,以及在那裏我也許能抑制異常有用的人:
public static void RunWithErrorSuppression(Action code) {
try
{
code();
}
catch (Exception ex)
{
// pass
}
}
該方法可以更細緻也允許捕獲異常:
public static void ExecuteWithLogging(Action code, Action<Exception> handles) {
try
{
code();
}
catch (Exception ex)
{
handles(ex);
}
}
那麼,什麼是這套戰術的集中異常處理的想法?如果這是一個糟糕的方向,有什麼具體原因可能導致我陷入麻煩?
小細節:除非您自己拋出,否則在近期版本的框架中無法捕捉到'StackOverflowException'。 – Joren 2009-10-21 21:46:35
您可以在其中指定預期異常的通用版本 – 2009-10-21 21:50:54
Vinko的好處,儘管我仍然沒有看到該解決方案如何更易於維護,表達,可讀或高性能。 (是的,我故意將性能放在最後。) – Lee 2009-10-21 22:05:12