假设我有一个具有复杂属性Foo
的类Bar
。然后,假设我在其他类中有类似以下的方法:
public void DoSomething(Foo foo)
{
if (foo == null)
throw new ArgumentNullException("foo");
if (foo.Bar == null)
throw new ArgumentNullException("bar");
}
在这里使用ArgumentNullException
是否恰当,严格来说,foo.Bar
在这种情况下不是一个论据?我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
的“正确”用法吗?处理这种情况的传统方法是什么?
感谢。
答案 0 :(得分:10)
理想情况下,Foo
类将确保其Bar
属性永远不为null。如果那是不可能的,我会在这种情况下抛出一个ArgumentException
,因为参数不是null,但它是无效的。