5

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この場合の引数ではありませんが、ここで適切なの使用はありますか? 手動で投げるのは適切ではないことを読み、理解できました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ですか? この状況を処理する従来の方法は何ですか?

ありがとう。

4

1 に答える 1

12

理想的には、FooクラスはそのBarプロパティが決してnullにならないようにします。ArgumentExceptionそれが不可能な場合は、引数がnullではないため、この場合はをスローしますが、無効です。

于 2013-02-26T21:09:50.830 に答える