契約による設計/ C#4.0 / ArgumentNullExceptionの回避
-
10-07-2019 - |
質問
すべての引数のnullをチェックし、引数がある場合にArgumenutNullExceptionsをスローすることにひどく疲れています。
私が理解しているように、C#4.0はコントラクトコンストラクトによる設計を可能にします。メソッドがC#4.0でnull引数を受け入れないことを指定することは可能ですか?
また、nullをチェックしてスローするという単調なタスクを回避するために、その間にできることはありますか(属性ですか?)
解決
役立つNotNull<T>
汎用クラスを作成できますが、いくつかの副作用があります。 Robert Nystromのブログ投稿をご覧ください。
他のヒント
Rick Brewsterは、この投稿で、簡潔で宣言的なスタイルのパラメーターチェックの優れたソリューションについて説明しています、
http:// blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/
リフレクション(DbCの欠点)の使用を回避し、非例外的なコードパスのオーバーヘッドを作成しません。
拡張メソッドを使用して、nullオブジェクトのインスタンスメソッド呼び出しのように見えるものを許可する方法と同様。 IMOのコーディングの非常に巧妙なビット。
DbC、Google Spec#およびPostSharpで販売されている場合。
既に与えられた答えの代替として、 Null Object design pattern
。
このデザインパターンの本質は、一度<!> quot; nullオブジェクト<!> quot;作成された場合、それ以上nullのチェックを実行する必要はなく、nullオブジェクトのメソッドは、null(そうでない場合)が<!> quot; real object <! quot;。
このデザインパターンはC#4.0に依存せず、実際、ほとんどすべてのOOプログラミング言語で簡単に実装できます。
C#4.0の新機能であるCode Contractsの使用を開始しました。MSからアドインをダウンロードして、プロジェクト設定で表示できるようにする必要があります。詳細はこちら-<!> gt; http://research.microsoft.com/en-us/projects/contracts/