访问参数的属性时使用ArgumentNullException

时间:2013-02-26 21:04:10

标签: c# exception exception-handling conventions

假设我有一个具有复杂属性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的“正确”用法吗?处理这种情况的传统方法是什么?

感谢。

1 个答案:

答案 0 :(得分:10)

理想情况下,Foo类将确保其Bar属性永远不为null。如果那是不可能的,我会在这种情况下抛出一个ArgumentException,因为参数不是null,但它是无效的。