假設我有一個具有複雜屬性Bar
的Foo
類。然後,假設我有一些其他類類似下面的方法:訪問參數屬性時使用ArgumentNullException
public void DoSomething(Foo foo)
{
if (foo == null)
throw new ArgumentNullException("foo");
if (foo.Bar == null)
throw new ArgumentNullException("bar");
}
是使用ArgumentNullException
適當這裏雖然嚴格來說,foo.Bar
是不是在這種情況下的說法? I have read,並且可以理解,手動拋出NullReferenceException
是不合適的。這是否告訴我我需要抽象?
public void DoSomething(Foo foo)
{
if (foo == null)
throw new ArgumentNullException("foo");
DoSomethingElse(foo.Bar);
}
private void DoSomethingElse(Bar bar)
{
if (bar == null)
throw new ArgumentNullException("bar");
}
我的第一個代碼段是ArgumentNullException
的「正確」用法嗎?處理這種情況的傳統方式是什麼?
謝謝。
當它不是'Foo'的有效實例(例如它的一個屬性爲null)時,你可以拋出'new ArgumentException(「foo」)' – MarcinJuraszek 2013-02-26 21:09:43
當你拋出一個'ArgumentException'時,字符串構造函數需要一個消息['new ArgumentException(string message)'](http://msdn.microsoft.com/zh-cn/library/wtxc6334.aspx)。如果您要指定參數名稱,請使用['new ArgumentException(string message,string paramName)'](http://msdn.microsoft.com/zh-cn/library/sxykka64.aspx)。 – 2013-02-26 21:16:42