使用的缺點是什麼區別:不帶參數
catch
{
MessageBox.Show("Error.");
}
和:在你的第二個例子
catch (Exception ex)
{
MessageBox.Show("Error.");
//we never use ex, so is it better to use catch without arguments?
}
使用的缺點是什麼區別:不帶參數
catch
{
MessageBox.Show("Error.");
}
和:在你的第二個例子
catch (Exception ex)
{
MessageBox.Show("Error.");
//we never use ex, so is it better to use catch without arguments?
}
從.NET 2開始,如果你不調整配置?沒有。
在此之前,或與一些配置的調整我不記得確切的說,有一個從非託管代碼沒有被轉換成Exception
兼容的物體被拋出的異常的可能性。
注意,這裏就是你指定類型,但不變量之間,另一種選擇:
catch (Exception)
{
...
}
個人而言,我會非常小心捕獲異常的,甚至沒有日誌它。如果你打電話給一個骨頭的API,它可能是必需的,但通常最好避免它。
「有可能從非託管代碼中拋出異常,而這些異常沒有得到......」因此,從2.0開始,它將轉換爲與Exception兼容?即現在由託管或非託管引發的任何事情都將被catch(Exception e){}所捕獲。順便說一句,我曾嘗試使用Outlook互操作庫進行試驗,但不知道如何獲得legimate unmanaged code error。 – devanalyst
@deanalyst:是的,我相信*現在一切都轉換爲「異常」。 –
@JonSkeet:但是'catch','catch(Exception)'和'catch(Exception ex)'有什麼區別?第一個沒有什麼比捕捉所有東西,第二個只是類型,第三個也是細節?除了例外,你應該抓住什麼? – testing
可以參考的異常數據,如堆棧跟蹤,來源等,還給出了一個有時有用的一般信息。它告訴你爲什麼你在調試時遇到了一個非常重要的異常。
我認爲你錯過了這一點,第一個捕獲所有異常,第二個捕獲.NET異常 –
實際上,他們所問的只是它們之間的區別兩個例子,這就是區別。要麼你引用異常,要麼你不引用。所以你知道,這兩個例子都能捕獲所有.Net異常。你捕獲的任何異常都是「.Net異常」,因爲這是C#。同樣重要的是要注意,所有異常在其繼承樹中都有Exception類,因爲異常類必須從繼承了Exception類的另一個類繼承,直接或間接繼承它。 – jlafay
你錯了,一些異常不會從異常繼承。通過用戶代碼或C#代碼創建的部分可以,但其他一些部分不需要 –
一般來說,你應該首先發現特定的錯誤。
但是如果你去追趕一般Exception
像你這樣我會說使用第二種情況:
catch (Exception ex)
{
MessageBox.Show("Error.");
//we never use ex, so is it better to use catch without arguments?
}
這可以幫助你debbuging自變量包含堆棧跟蹤,異常消息.. 。等等。您可以使用它來記錄錯誤或者可以幫助您預防錯誤的內容。
使用這種方法,但要非常小心:
MessageBox.Show("Error.");
沒有跟蹤你的錯誤的地方(如日誌文件)可能會導致一個非常大的混亂。
無論如何都可以訪問異常數據。如果您在沒有變量的情況下進入異常,則會顯示一個符號,它會向您顯示異常數據。 – GeirGrusom
@GeirGrusom - 是的,但你不能使用該信息登錄文件或我們可以? – TheBoyan
@GeirGrusom當然,你可以在調試的時候看到異常,但是你沒有引用它來記錄或向用戶顯示適當的消息。 – DOK
我認爲他們是一樣的。但第二種情況引發了編譯器警告,因爲你聲明瞭一個你沒有使用的異常。我很喜歡第一個,因爲你明確表示你不使用這個異常。還有第三個
catch (Exception)
{
//do something
}
如果你想指定異常的類型,但不關心異常本身。
那麼這是否意味着如果拋出異常,它仍然會進入catch塊內部,即使我們對異常沒有做任何事情? –
有一些例外不能是catch(Exception)
catched。
在單聲道linux下的excel中,應該沒有參數就可以捕獲。
否則運行時將忽略catch(Exception)
陳述。
System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
如果遇到這樣的問題,請嘗試去除catch
語句的參數,請登錄上下文瓦爾找出錯誤原因。
P.S.我不知道如何在Windows上,Windows中運行的程序是正常的。
閱讀它:http://msdn.microsoft.com/en-us/library/0/default.aspx(VS.80).aspx – JonH
在第二種情況下,如果要捕獲該類型,請使用'catch(Exception)'或派生類型的例外,但不想知道細節。否則,你會得到一個警告,並在不需要的時候聲明一個變量 –