簡體   English   中英

ArgumentException和Exception之間有什么區別?

[英]What is the difference between ArgumentException and 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!");
}

我只是想知道不同之處是什么以及為什么一個在另一個之上使用

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

MSDN很好地描述了它:

當您必須拋出異常時,通常可以在.NET Framework中使用現有的異常類型,而不是實現自定義異常。 您應該在這兩個條件下使用標准異常類型:

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

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

TLDR: ArgumentException是一種Exception用於提供更詳細的信息

對象是萬物的根源。

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

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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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