C#では、参照型のインスタンスがnullableポインタとして関数に渡されます。C#で参照型の "非nullableness"を文書化するには?
ほとんどの場合、関数はnullでないポインタ(私の経験ではすべてのケースの95%)を期待します。この関数がnull以外のポインタを期待しているという事実を文書化する最良の方法は何ですか?
更新:ありがとうございました。
.NET 4でC#では、参照型のインスタンスがnullableポインタとして関数に渡されます。C#で参照型の "非nullableness"を文書化するには?
ほとんどの場合、関数はnullでないポインタ(私の経験ではすべてのケースの95%)を期待します。この関数がnull以外のポインタを期待しているという事実を文書化する最良の方法は何ですか?
更新:ありがとうございました。
.NET 4で1)メソッドにnull
if (instanceRef == null)
{
throw new ArgumentNullException("instanceRef");
}
2)
/// <exception cref="T:System.ArgumentNullException"> is thrown
/// when <paramref name="instanceRef"/> is <c>null</c></exception>
のVisual Basicで null参照(Nothing)のない場合にスローされる例外を追加を拒否していることを確認します が有効な引数として受け入れないメソッドに渡されました(MSDN)
Debug.Assert(classInstanceRef != null);
...どのくらいの頻度、あなたのプログラムのデバッグ出力をチェックしますか? –
デバッグモードでコンパイルすると、実行時にアサーションエラーダイアログがポップアップします。どのくらいあなたの顔にそれをしたいですか? –
、あなたは事のちょうどこの種のために意図されているcode contracts、使用する機能があります:ところで
Contract.Requires(classInstanceRef != null);
を、私は考えて、適切なドキュメントと投げArgumentNullException
を使用できます。
チェックアウトコード契約ライブラリ:
Contract.Requires(x ! = null);
ライブラリ:それはあなたのコードにプリ条件を指定し、それがコードベースの静的解析を用いて検証持つことができます http://research.microsoft.com/en-us/projects/contracts/
.NET Framework v 4に含まれ、フレームワークの以前のバージョンの商用ライセンスがあります。
if(classInstanceRef == null) { throw new NullReferenceException("classInstanceRef"); }
?
///<remarks>classInstanceRef cannot be null</remarks>
NulLReferenceExceptionをスローしないでください(ガイドラインに従ってhttp://msdn.microsoft.com/en-us/library/ms229007.aspx)。代わりにArgumentNullExceptionを使用することを推奨します。 –
実際には、私のために怠惰な考えがありました...自分のコードでそれをしません。 – Massif
私はこのような何かしたい:私はドキュメントを呼びたいものを、今だ
/// <summary>
/// Does stuff
/// </summary>
/// <param name="classInstanceRef">some documentation</param>
/// <exception cref="ArgumentNullException">Thrown when the <paramref name="classInstanceRef"/> is null.</exception>
public void f(Class classInstanceRef)
{
if (classInstanceRef == null)
throw new ArgumentNullException("classInstanceRef");
}
'ArgumentException'の代わりに' ArgumentNullException'を使うべきです。 –
代わりに 'ArgumentNullException'を使用しませんか? – LukeH
ArgumentExceptionの代わりにArgumentNullExceptionをスローすることは好ましくないでしょうか? –