簡體   English   中英

C#中的Catch and Catch(例外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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM