1

考えられる議論C#を処理する経験則またはコーディング規約契約はありますか?null

例として、パラメーターを取得するカスタムメソッドを作成していbyte[] dataます。

public static string ConvertDataToMyOwnAndCustomString(byte[] data) { ... }

さて、合格した場合はどうすればよいdataですnullか?

NullReferenceException可能性が発生するようにそのままにしておくべきですか?または、小切手を書いて次のようなことをする必要があります。

if (data == null) return null;
4

4 に答える 4

8

一般的に受け入れられているパターンは、ArgumentNullException

if(data == null) { throw new ArgumentNullException("data"); }

クライアントがメソッドに渡すことが実際にエラーである場合null。最近では、コード契約を通じて要件を適用することもできます。

Contract.Requires(data != null);

もちろん、それはあなたのメソッドのエラーではない場合が非常によくあるかもしれません。nullそれはあなたが決めることですが、私たちではありません。nullただし、エラーが発生したことをクライアントに示すために戻ってはいけません。

于 2011-11-23T01:58:33.103 に答える
2

最も一般的なパターンは次のとおりです。

if(data == null) 
    throw new ArgumentNullException("data");
于 2011-11-23T01:58:53.590 に答える
1

それは本当にすべてに依存します。この方法はどこにありますか?どのくらいの頻度で再利用されますか?それはこのアプリケーション専用ですか、それとも再び利用されるコードライブラリの一部ですか?

特に他のアプリケーション/開発者によって使用される場合は、データが存在するかどうかをテストしますがnull、例外をスローします。あなたはそれが静かに窒息することを望まない。

これが、再利用または再検討されることのないコード用の1回限りのメソッドである場合は、をテストしnullて返すことができますnull。ただし、これは結果を知っているためにのみ適切であることを忘れないでください。他のアプリケーションがこれを使用する可能性がある場合、または別の開発者がいる場合は、テストしてnullから例外をスローします(ほとんどの場合ArgumentNullException)。

于 2011-11-23T01:58:59.627 に答える
1

ジェイソンとクリストファーの答えは正しいです。それらに追加したいだけです。

そのパラメータで取得できる可能性が高く、例外的な条件ではない場合はnull、例外をスローするのではなく、適切な値を返す必要があります。多くの場合、nullそれ自体が機能します。

たとえば、モデルバインディングの一部のシステムでは、テキスト値が欠落してnullいると、パラメータとして渡される可能性があります。このような発生はエラーである可能性がありますが、「例外的な」ものではありません。

于 2011-11-23T02:01:43.047 に答える