CA1062を抑制する必要があります:パブリック方法の引数を検証する必要がありますか?

StackOverflow https://stackoverflow.com/questions/2856667

質問

私は最近、Visual Studio 2008からVisual Studio 2010にプロジェクトをアップグレードしました。

Visual Studio 2008では、このコード分析ルールは存在しません。

今、私はこのルールを使用する必要があるかどうかはわかりません。

私はオープンソースライブラリを構築しているので、人々が間違いを犯さないようにすることが重要だと思われます。しかし、私がやろうとしているのは投げるだけなら ArgumentNullException パラメーターの場合 null, 、それ以来、役に立たないコードを書くようです ArgumentNullException 私がそのコードを書いていなくても、投げられます。

編集: また、対処する必要があるパフォーマンスの問題があります。チェック null すべての公開方法では、パフォーマンスの問題を引き起こす可能性があります。

そのルールを削除するか、違反を修正する必要がありますか?

役に立ちましたか?

解決

場合によります。 ArgumentNullexceptionを使用する場合の条約は、説明にnull引数の名前を含めることです。したがって、発信者は何がうまくいかなかったかを正確に知るでしょう。

nullReferenceExceptionのソース(検証しない場合に起こることです)は簡単に見つけることができますが、方法が複雑な場合はより困難な場合があります。複数の参照がnullになる可能性のあるコード行で終わる場合があります。

個人的には、指定された引数のnull入力を処理できない場合は、パブリックメソッドに引数nullexceptionを投げることを好みます。これは、メソッドがどのように実装されていても、一貫した動作を可能にするためです。

編集への返信:私の意見では、すべてのコードを最適化するよりも、驚きがほとんどない一貫したインターフェイスのセットを提供することがより重要です。私の推測では、ほとんどの場合、ヌルチェックのパフォーマンスオーバーヘッドは重要ではないと思います。それが問題であることが判明した場合(プロファイリングのように)、私はそれを変更することを検討します。そうでなければ、私はそれをこの時点で問題とは考えていません。

他のヒント

このルールは、コードへの最初のエントリでパラメーターを常に確認することが常に最適であると判断したためです。そうすれば、あなたのコードを使用している人が例外を取得すると、そのコンテキストがより良くなります。たとえば、ソースコードを持っていない人は、例外があなたのコードにスローされていることを確認し、あなたの時間と彼らのものを無駄にするためにあなたに対してバグレポートを提出するかもしれません。

iMho No. Nullのチェックは、アプリケーションのパフォーマンスボトルネックになることはほとんどありません。 (そして、それが重要である100万のケースでは、あなたはあなたのプロファイラーでそれを見つけて、その1つのケースを削除します)。

あなたの心の中で形成すべきもう1つの質問は、「新しいnullreferenceException()を投げることです。本当にエラーを処理するための最良の方法ですか?」多くの場合、それよりもうまく処理できます(たとえユーザーや自分自身にデバッグの目的でより良いエラーレポートを提供する場合でも)。多くの場合、コードはヌルを優雅に処理できるため、これがエラーになる必要はありません。

編集

編集に答えるには:nullチェックは本当に時間がかかりません。単にメソッドを呼び出すためのオーバーヘッドは、nullチェックの数百倍ではないにしても数十になります。ヌルチェックが大きな違いを生む唯一の場所は、他にほとんど何もしていない大きなタイトなループにあります。この状況はあまり頻繁に起こりません - 通常、あなたはヌルをチェックしてから、その参照で比較的高価なことをします。

クラッシュや失敗が良いことである状況はありません。クラッシュして顧客のデータを失うよりも、nullチェックでアプリケーションを「遅くする」方が常に良いです。

したがって、コードを早期に最適化しないでください。それをよく書いて、維持可能で堅牢であるために、それから プロフィール ボトルネックがどこにあるかを見るために。私は28年間プログラミングをしてきましたが、ヌルチェックで非常にリベラルであり、 一度もない ヌルチェックがパフォーマンスの問題の原因であることがわかりました。通常、O(n^3)アプローチが可能なO(n^3)アプローチが可能なO(n^3)アルゴリズムを使用して、ループで不必要な作業をたくさん行うこと、高価な計算値などをキャッシュできないようなものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top