BigIntegerライブラリを作成している場合は、絶対に適切なDivideByZero
例外をスローする必要があります。ショッピングカートライブラリを作成している場合は、おそらくそうではありません。
現時点では、を投げる正当な理由を考えることはできませんNullReferenceException
。HummingBirdFeeder.OpenSugarWaterDispenser(Dispenser dispenser, int flowRate)
「最初のパラメータは、開きたい砂糖水ディスペンサーです」というドキュメントを使用してAPIを作成する場合。そして、誰かがやって来てこのメソッドにnull値を渡した場合は、間違いなく。をスローする必要がありArgumentNullException
ます。
ただし、APIを外すNullReferenceException
のは怠惰です。なぜなら、それは間違っており、内部の一部がリークされるからです。
追加するために編集:
質問を参照するように変更したArgumentNullException
ので、答えは簡単です。はい、これらの状況では必ずその種の例外をスローする必要があります。
- あなたはパブリックメソッドを書いています。
- 引数にnull値を取得することは、何らかの形で不適切です(つまり、その特定の引数がないとメソッドは意味をなしません)。
- メソッドのドキュメントには、null値は許可されていないことが示されています。
その場合、メソッドが最初に行うべきことは、null値をチェックし、条件に違反した場合は例外をスローすることです。
プライベートメソッドまたは内部メソッドを作成している場合、ほとんどの場合、リリースビルドの実行時にパラメーターを検証する必要はありません。自分のコードが自分のコードを正しく呼び出すようにすることができます。その保証を作成するのに役立つ1つのことは、アサーションを追加してデバッグビルドのパラメーターを検証することです。
Debug.Assert(dispenser != null);
このようにして、コードが正しく機能していることを確認し、リリースされたコードの速度を落とすことなく、無駄な冗長なチェックを行うことなく、エラーを早期にキャッチできます。