![](/img/trans.png)
[英]What is the difference between the 3 catch block variants in C# ( 'Catch', 'Catch (Exception)', and 'Catch(Exception e)' )?
[英]Catch and Catch(Exception e) in C#
我猜這三部分代碼沒有區別,不是嗎?
try
{
// .............
}
catch
{
// .............
}
和
try
{
// .............
}
catch(Exception)
{
// .............
}
和
try
{
// .............
}
catch(Exception e)
{
// .............
}
但是,當我應該使用第一個和第二個時,我幾乎是精明的。 但我希望你能說出你的想法。
第一個也將捕獲不是異常的拋出對象。
( 這可能發生在非符合CLS的代碼中 )
如果您實際上沒有使用異常變量,則第二個不會給出編譯器警告。
僅當您確實需要檢查拋出的異常(例如,記錄它)時,才應使用第三個。
這些代碼位是有點不同。
第一個不允許您從發生的異常中獲取任何信息。 它會抓住任何東西,但你不會有什么被抓的任何線索。
第二個不允許你做任何事情,但至少讓你指定什么樣的例外。 在您的示例中,由於您已指示Exception
,因此它將捕獲從Exception
派生的所有內容。 但它可以改變以微調被捕獲的東西 - 但仍然允許你不做任何事情。
第三個讓你實際訪問異常並從中獲取信息。
第三種情況實際上是這樣的:
當try塊中的一行發生異常時,會創建一個對應異常的對象。 包含(Exception e)
的catch塊實際上有一個Exception
類變量e
作為其參數。 然后將異常對象的引用復制到此引用變量。 您現在可以根據需要使用此e變量來識別引發的異常類型,例如e.message()
給出與異常相關的描述。
Slaks已經很好地解釋了第一個和第二個案例
這取決於。 我不知道前兩者之間的區別。
如果要在catch塊中使用異常,即獲取堆棧跟蹤或其他信息,則必須使用最后一個,以便有一個對象可供引用。
如果你只是為其他人處理異常,你就不需要了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.