2016-04-22 80 views
1

在我們教授的示例代碼,他有一個片段,它看起來像這樣:ArgumentException和just Exception之間的區別是什麼?

if (name == null || name == "") 
    throw new ArgumentException("name is null or empty"); 

而另一個片段,看起來像這樣:

if (!File.Exists(name)) 
{ 
    throw new Exception("File does not exist!"); 
} 

我只是想知道都有哪些不同的是,爲什麼一個是在另一個之上使用

回答

4

Exception是所有例外的基類。 ArgumentException用於表示參數無效。它從Exception小類。使用catch,您實際上可以根據異常的類型進行篩選,並以不同的方式處理每一個異常。

MSDN描述得好:

當你不得不拋出一個異常,你可以經常在.NET Framework使用現有的異常類型,而不是實現自定義異常。你應該這兩種情況下,使用一個標準的異常類型:

  • 你扔這是由使用錯誤造成的(即通過程序邏輯的是誰喊你的方法開發者犯了一個錯誤)異常。通常,您會拋出異常,如ArgumentException,ArgumentNullException,InvalidOperationException或NotSupportedException。在實例化異常對象時,您提供給異常對象構造函數的字符串應該描述錯誤,以便開發人員修復它。有關更多信息,請參閱Message屬性。
  • 您正在處理可以通過現有的.NET Framework異常傳遞給調用者的錯誤。你應該拋出最可能的派生異常。例如,如果一個方法需要一個參數作爲枚舉類型的有效成員,則應該拋出一個InvalidEnumArgumentException(派生類最多),而不是一個ArgumentException。
0

Exception是基類。這只是最普通的一種例外。在很多情況下,可以使用更具體的類型來提供有關發生的錯誤種類的更多信息。在這種情況下,ArgumentException是一種異常,表示參數存在錯誤。

TLDR:ArgumentException是用來提供更詳細的信息

0

對象的類型的Exception是萬物的根源。

有許多對象的子類型。例外是其中之一。

有許多異常的子類型。 SystemException就是其中之一。

SystemException有許多子類型。 ArgumentException是其中之一。

ArgumentException有許多子類型。 ArgumentNullException和ArgumentOutOfRangeException是其中的兩個。

如果你的教授真的想用它們可以寫

if (name==null) throw new ArgumentNullException("name"); 
if (name=="") throw new ArgumentOutOfRangeException("name", name, "name cannot be zero length"); 
最明確的例外
相關問題