[英]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.