我使用下面的代碼:什麼進入()捕獲?
catch (Exception ex) {
processException(ex);
return View("CreateEdit", vm);
}
是否有必要聲明異常「異常前」。我想知道是否有一個catch塊 有任何在後面的括號中,與異常派生的東西 無關?
我使用下面的代碼:什麼進入()捕獲?
catch (Exception ex) {
processException(ex);
return View("CreateEdit", vm);
}
是否有必要聲明異常「異常前」。我想知道是否有一個catch塊 有任何在後面的括號中,與異常派生的東西 無關?
在catch塊中,你將不得不提供你想要捕獲的異常類型。所有這些類型都必須從類System.Exception
最好不要趕Exception
類型的異常直接而捕獲特定的異常的。處理System.Exception(如果存在)的catch塊最後指定爲最佳值。
http://msdn.microsoft.com/en-us/library/ms229007.aspx
http://msdn.microsoft.com/en-us/library/system.exception.aspx
否;它必須始終是一個類型爲Exception
的參數或從其派生的東西。
該部分指定在catch
塊中捕獲哪種類型的異常及其派生類。例如,考慮:
try
{
//stuff...
}
catch (DivideByZeroException ex)
{
//do stuff with divide by zero...
}
catch (MyCustomException ex)
{
//do stuff with my custom exception...
}
catch (IOException ex)
{
//do stuff with IO Exception...
}
catch (Exception ex)
{
//handle all other exceptions
}
的catch
條款的順序是至關重要的,如果有多個。他們必須始終從大多數派生到最少;如果我將最後一個塊Exception
置於頂部,它將捕獲所有異常,而其他更多派生塊將不會捕獲任何內容。
也可以忽略最通用的Exception
,以便讓其他類型的異常將堆棧升級到新的級別。
在C#中,當您捕捉某種特定類型的東西時,它必須是Exception
或從Exception
派生的類型。其他.NET語言(例如C++/CLI)支持拋出非Exception
類型,並且捕獲這些類型的唯一方法是使用「空捕獲」,即catch { ... }
- 但這僅在非常罕見的情況下才有用與其他圖書館互操作)。
不,它不是強制性的。在catch塊中,聲明瞭一個System.Exception類的對象,該類包含引發的異常的詳細信息。
你可以聲明你的想法,因爲它只是約定使用Exception Ex
。括號中的類是捕獲的異常的類型。如果您不使用括號,那麼您使用throw
聲明拋出異常。
例如,這些都是有效的:
catch (Exception ex) { }
catch (Exception e) { }
catch (Exception objEx) { }
如下問題的答案表明,好字捕捉異常的類型(類)是強制性的。但是,聲明該類型的*變量*是可選的。如果你想使用'catch'塊中的異常對象,你只需要這樣做。否則,你可以簡單地寫'catch(Exception)'或甚至更好,處理一個特定的更多派生異常,'catch(FileNotFoundException)'。 – 2011-12-20 04:41:10