1

C#のコード

void method(int a)
{
    int b = get(a);
    if ( b == 0 )
    {
        throw new NullReferenceException();
    }
}

NullReferenceException をスローすると、警告が生成され、良い方法ではありません。

NullReferenceException の代わりに例外がある場合はどうなりますか? ArgumentNullException が見つかりましたが、b は引数ではないため、このコードにはあまり適していません。

4

2 に答える 2

2

@AlexeiLevenkov がコメントで述べたように、例外タイプの選択は個人の選択に委ねられます。ただし、従うべきガイドラインがいくつかあります。たとえば、コードからスローしないなど、ご覧のとおりNullReferenceExceptionです。

ご想像のとおり、 MSDNはかなり健全なガイドラインを提供しています。

実際の質問に関しては、カスタム例外が適切でない場合は、おそらく使用しますInvalidOperationException。YMMV。

于 2016-11-18T05:35:19.710 に答える
1

この場合、関数 get(a) が決定論的である場合、ArgumentException をスローして、a の許容範囲を示すことをお勧めします。

つまり、 new ArgumentException("Parmeter a must be ....", "a"); をスローします。

関数 get(a) が非決定論的である場合 (何が許容範囲かはわかりません)、ApplicationException に何らかの理由 (つまり、「サーバーが現在ビジー状態のため、操作を実行できません」) を示すメッセージが表示されます。

于 2016-11-18T07:43:23.573 に答える